算法题目-树的子结构

来源:互联网 发布:二进制数据转换字符串 编辑:程序博客网 时间:2024/06/09 15:48

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

分析:

分为两步:1、检查A中是否有与B的根节点相同的结点R

2、以R为根节点的子树是否包含和数B一样的结构。

解答:

/**public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}*/public class Solution {    public boolean HasSubtree(TreeNode root1,TreeNode root2) {        boolean result=false;        if((root1!=null)&&(root2!=null)){            if(root1.val==root2.val){                result=DoesTree1HasTree2(root1,root2);            }            if(!result){                result=HasSubtree(root1.left,root2);            }             if(!result){                result=HasSubtree(root1.right,root2);            }        }        return result;    }    public boolean DoesTree1HasTree2(TreeNode root1,TreeNode root2){        if((root1==null)&&(root2!=null)){            return false;        }        if(root2==null){            return true;        }        if(root1.val!=root2.val){            return false;        }        return DoesTree1HasTree2(root1.left,root2.left)&&DoesTree1HasTree2(root1.right,root2.right);    }}


原创粉丝点击