码迷,mamicode.com
首页 > 其他好文 > 详细

子结构和子树

时间:2017-10-05 17:39:09      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:btree   sam   结构   ==   递归   证明   boolean   一个   log   

一 判断root2 是不是 root1 的子结构    空树不是任何树的子结构

技术分享

 

/**

  Step1.在树root1中找到和root2的根结点的值一样的结点R;

  Step2.判断树root1中以R为根结点的子树是不是包含和树root2一样的结构。

  很明显,这是一个递归的过程。
*/

public class Solution {
    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
        if(root2 == null || root1 == null) return false;
       
        return DoesTree1HasTree2(root1,root2)||HasSubtree(root1.left, root2) || HasSubtree(root1.right, root2);
    }
    
   //判断root2是不是以root1根为起始的子结构
    public static boolean DoesTree1HasTree2(TreeNode root1,TreeNode root2){ 
        if (root2 == null)
            return true;   // 证明Tree2已经遍历结束,匹配成功
        if (root1 == null)
            return false;// 证明Tree1已经遍历结束,匹配失败
        if (root1.val != root2.val)
            return false;
        // 递归验证左子树和右子树是否包含Tree2
        return DoesTree1HasTree2(root1.left, root2.left) 
              && DoesTree1HasTree2(root1.right, root2.right);
    }
}

 

 

二   判断root2 是不是 root1 的子树  

子树就是树的其中一个节点以及其下面的所有的节点所构成的树。

/**
  
  Step1.在树root1中找到和root2的根结点的值一样的结点R;

  Step2.判断树root1中以R为根结点的树是不和树root2一样。

  很明显,这是一个递归的过程。
*/
public class Solution {
    public boolean isSubtree(TreeNode root1, TreeNode root2) {
        if(root1 == null) return false;
        return isSame(root1, root2) || isSubtree(root1.left, root2) || isSubtree(root1.right, root2);
    }
    public boolean isSame(TreeNode s, TreeNode t) {
        if(s == null && t == null) return true;
        if(s == null || t == null) return false;
        if(s.val != t.val) return false;
        return isSame(s.left, t.left) && isSame(s.right, t.right);
    }
}   

 

子结构和子树

标签:btree   sam   结构   ==   递归   证明   boolean   一个   log   

原文地址:http://www.cnblogs.com/chengdabelief/p/7629438.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!