【剑指offer】十一。树的子结构

题目描述

请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。

分析:两棵树A 和B,判断B是不是A的子树,分为三种情况,一,A的根和B的根相同,则继续比较A的左子树与B的左子树,A的右子树与B的右子树。二,若A的根和B的根不同,这比较B是不是在A的左子树中,三,比较B是不是在A的右子树中。代码如下:

 1 /**
 2 public class TreeNode {
 3     int val = 0;
 4     TreeNode left = null;
 5     TreeNode right = null;
 6
 7     public TreeNode(int val) {
 8         this.val = val;
 9
10     }
11
12 }
13 */
14 public class Solution {
15    public boolean HasSubtree(TreeNode root1,TreeNode root2) {
16      boolean res = false ;
17      if(root1!=null&&root2!=null){
18          if(root1.val==root2.val){
19              res = doesHas(root1,root2);
20          }
21          if(!res){
22              res = HasSubtree(root1.left,root2) ;
23          }
24          if(!res){
25              res = HasSubtree(root1.right,root2) ;
26          }
27      }
28      return res ;
29     }
30     private boolean doesHas(TreeNode root1, TreeNode root2) {
31     if(root2==null){
32         return true ;
33     }
34     if(root1==null){
35         return false ;
36     }
37     if(root1.val!=root2.val){
38         return false ;
39     }
40
41     return doesHas(root1.left,root2.left)&&doesHas(root1.right,root2.right);
42 }
43 }
时间: 2024-10-24 13:14:25

【剑指offer】十一。树的子结构的相关文章

【剑指offer】树的子结构

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25907685 剑指offer第18题,九度OJ上测试通过! 题目描述: 输入两颗二叉树A,B,判断B是不是A的子结构. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行一个整数n,m(1<=n<=1000,1<=m<=1000):n代表将要输入的二叉树A的节点个数(节点从1开始计数),m代表将要输入的二叉树B的节点个数(节点从1开始计数).

剑指OFFER之树的子结构(九度OJ1520)

题目描述: 输入两颗二叉树A,B,判断B是不是A的子结构. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行一个整数n,m(1<=n<=1000,1<=m<=1000):n代表将要输入的二叉树A的节点个数(节点从1开始计数),m代表将要输入的二叉树B的节点个数(节点从1开始计数).接下来一行有n个数,每个数代表A树中第i个元素的数值,接下来有n行,第一个数Ki代表第i个节点的子孩子个数,接下来有Ki个树,代表节点i子孩子节点标号.接下来m+1行,与

剑指offer之树的子结构

题目: 树的子结构 链接: https://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88?tpId=13&tqId=11170&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 思路: 分为两步: 第一步:

python剑指offer 实现树的子结构

题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def HasSubtree(self, pRoot1, pRoot2): # write code here if not

剑指Offer 17. 树的子结构 (二叉树)

题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目地址 https://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88?tpId=13&tqId=11170&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 思路 如果树1或树2为空时,返回False 在树

剑指offer:树的子结构

题目描述输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None class Solution: def HasSubtree(self, pRoot1, pRoot2): def helper(root1, root2): # 如果root2已经遍历完了,说明root2的每一个节点都能在p

《剑指offer》-树的子结构

题目描述 输入两颗二叉树A,B,判断B是不是A的子结构. 解法:就是先找到相等的根节点,然后再子树遍历.所以要用到两个递归函数,根节点的递归函数,子树的递归函数. 注意子树的递归函数中应该先判断子树是否遍历完为空,则返回true,每次遍历前都应该判断根节点是否存在.这样就完美了. /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(N

[剑指Offer] 17.树的子结构

[思路]要查找树A中是否存在和树B结构一样的子树,可以分成两步: 1.第一步在树A中找到和B的根节点的值一样的结点R:即当前树A包含子树B,HasSubtree(...) 2.第二步再判断树A中以R为根结点的子树是不是包含和树B一样的结构.即当前树A是否是子树B,IsSubtree(...) 1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct TreeNode *right; 6 TreeNode(int x

。。。剑指Offer之——树的子结构。。。

1 // 遍历整个树 2 public boolean HasSubtree(TreeNode root1, TreeNode root2) { 3 boolean result = false; 4 // 如果root1,root2中只要有一个是null,则返回false 5 if (root1 != null && root2 != null) { 6 // 找到两个数值相同的根节点 7 if (root1.val == root2.val) { 8 // 判断以这个根节点的子树,是否

剑指OFFER之树的子结构(九度OJ1520)踪仔酌滓滓驻

http://blog.csdn.net/kangmiao89757/article/details/43390691 http://blog.csdn.net/kangmiao89757/article/details/43390495 http://blog.csdn.net/kangmiao89757/article/details/43390161 http://blog.csdn.net/kangmiao89757/article/details/43389909 http://blo