栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

广度/深搜优先遍历解决填充右节点问题、是否为子树问题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

广度/深搜优先遍历解决填充右节点问题、是否为子树问题

思路:

显然层序/广度优先遍历更适合此题,

在层序遍历的过程中,连接每一层上的各个结点即可。

class Solution {
public:
    Node* connect(Node* root) {
        queueq;
        if(root==NULL)return root;
        
        q.push(root);
        while(!q.empty())
        {
            int size=q.size();
            Node*newNode=NULL;//每一层之前都先创建一个NULL指针,用来指向这一层的第一个结点
            for(int i=1;i<=size;i++)
            {
                Node*tmp=q.front(); 
                q.pop();
                if(tmp->left)q.push(tmp->left);
                if(tmp->right)q.push(tmp->right);
                if(i!=1)
                    newNode->next=tmp;//当该指针不是该层第一个元素时,移动newNode,连接两个结点
                newNode=tmp;
            }
        }
        return root;
    }
};

 思路:内外层双重检查

外层检查:root的每一个子树是否可能和subroot相同;

内层检查:检查所有可能的子树中的每一个结点是否和subroot结点相同;

难度:较难,哪里是简单题。。。

class Solution {
public:
//内层检查函数,查看结点是否相等
    bool compare(TreeNode* root, TreeNode* subRoot) {
        //如果两个都为空
        if(root==NULL&&subRoot==NULL){
            return true;
        }
        //如果只有一个为空
        if(root==NULL||subRoot==NULL){
            return false;
        }
        //如果两个都不空,结点值也不同,那直接返回false
        if(root->val!=subRoot->val){
            return false;
        }
        //如果现在结点值和子树结点值相同,再分别检查两个的左右孩子
        return compare(root->left, subRoot->left) && compare(root->right, subRoot->right);

    }
//外层检查函数,查看是否是子树
    bool isSubtree(TreeNode* root, TreeNode* subRoot) {
        //如果要检查的子树为空,那么不用查了,肯定对的
        if(subRoot == NULL) return true;

        //如果要检查的子树不空,但root是空的,那也不用查了,错的。
        if(root == NULL) return false;

        //要么是它本身,要么是它左子树,要么是它的右子树
        return compare(root, subRoot) || isSubtree(root->left, subRoot) || isSubtree(root->right, subRoot);
    }
};

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/960918.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号