• 剑指offer17-树的子结构


    输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

    思路:先序遍历A判定节点是否跟B的头结点相等;如果发现相等节点,就再次递归遍历相应A的子树是否包含B树;

            bool equal(TreeNode* p1,TreeNode* p2)
        {
            //p1可能比p2复杂;
         //   if(p2==NULL) return true;
            //bool res=true;
            if(p1==NULL||(p1->val!=p2->val)) return false;
            //if(p1!=NULL&&p2==NULL) return false;
            bool resl=true,resr=true;
            //不处理但有返回值
            if(p2->left!=NULL)
            {
                resl=equal(p1->left,p2->left);
            }
            if(p2->right!=NULL)
            {
                resr=equal(p1->right,p2->right);
            }
           // if(p2!=NULL&&p1!=NULL)
            return resl&&resr;
            
        }
        bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
        {
            //
            if(pRoot1==NULL||pRoot2==NULL) return false;
            bool res=false;
            if(pRoot1->val==pRoot2->val)
                res=equal(pRoot1,pRoot2);
            if(!res)
            {
                res=HasSubtree(pRoot1->left,pRoot2);
                if(!res)
                    res=HasSubtree(pRoot1->right,pRoot2);
            }
            return res;
        }

  • 相关阅读:
    leetcode 337. House Robber III
    leetcode 366 Find Leaves of Binary Tree
    leetcode 250 Count Univalue Subtrees
    leetcode 132 Palindrome Pairs 2
    leetcode 131 Palindrome Pairs
    leetcode 336 Palindrome Pairs
    leetcode 214 Shortest Palindrome
    leetcode 9 Palindrome Number
    Socket编程
    Zookeeper
  • 原文地址:https://www.cnblogs.com/trouble-easy/p/12965654.html
Copyright © 2020-2023  润新知