树的子结构

来源:互联网 发布:gtkwave mac 编辑:程序博客网 时间:2024/05/22 23:08

题目描述:
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
解题思路:
(要养成一个习惯,对任何一个树节点进行访问时,一定要提前检测该节点是否为空)
1、递归思想,如果根节点相同则递归调用SameRootNode(),如果根节点不相同,则判断tree1的左子树和tree2是否相同,再判断右子树和tree2是否相同;
2、注意null条件。

/** * Created by Administrator on 2017/4/13. */public class Solution23 {    public static class TreeNode{        int val;        TreeNode left = null;        TreeNode right = null;        public  TreeNode(int val){            this.val = val;        }    }    public static boolean HasSubTree(TreeNode root1,TreeNode root2){        if (root1 == null&& root2 == null){            return false;        }else if (root1.val == root1.val){            return SameRootNode(root1,root2);        }else if (root1.left != root2){            return HasSubTree(root1.right,root2);        }else {            return HasSubTree(root1.right,root2);        }    }    public static boolean SameRootNode(TreeNode root1,TreeNode root2){        if (root1 == null && root2 !=null){return false;}        if (root2 == null){return true;}        if (root1.val != root2.val){return false;}        return SameRootNode(root1.left,root2.left) && SameRootNode(root1.right,root2.right);    }    public static void main(String args[]){        TreeNode a = new TreeNode(5);        TreeNode b = new TreeNode(6);        System.out.println(HasSubTree(a,b));    }}
0 0
原创粉丝点击