zoukankan      html  css  js  c++  java
  • 树的子结构

    来源:牛客网  http://www.nowcoder.com/questionTerminal/6e196c44c7004d15b1610b9afca8bd88

    题目描述

    输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
     
    思路:
    (1)在树A中查找等于树B根节点的节点R
    (2)判断以R为根节点的子树是否包含了树B
    其中(1),可用循环或递归的方式遍历树A。我采用了一个Queue用循环的方式层次遍历。
    其中(2),递归的判断R的左右节点是否与B的左右节点相同,终止件是到达了A或B叶子节点。
     
     1 import java.util.*;
     2 /**
     3 public class TreeNode {
     4     int val = 0;
     5     TreeNode left = null;
     6     TreeNode right = null;
     7 
     8     public TreeNode(int val) {
     9         this.val = val;
    10 
    11     }
    12 
    13 }
    14 */
    15 public class Solution {
    16     // judging root2 is a subtree of root1 or not
    17     public static boolean HasSubtree(TreeNode root1, TreeNode root2) {
    18         if(root1==null || root2==null) return false;
    19         
    20         Queue<TreeNode> queue = new LinkedList<TreeNode>();
    21         queue.add(root1);
    22         TreeNode node;
    23         
    24         while (!queue.isEmpty()) {
    25             node = queue.poll();
    26             if (node.left != null) queue.add(node.left);
    27             if (node.right != null) queue.add(node.right);
    28 
    29             if (node.val==root2.val && isSame(node, root2)) 
    30                 return true;
    31         }
    32         return false;
    33     }
    34 
    35     public static boolean isSame(TreeNode t1, TreeNode t2) {
    36         if(t2==null) return true;
    37         if(t1==null) return false;
    38         if(t1.val!=t2.val) return false;
    39         return isSame(t1.left,t2.left) && isSame(t1.right,t2.right);
    40     }
    41 
    42 }

    cdcd

  • 相关阅读:
    linux常用命令
    Python 父类调用子类方法
    import win32api 安装pip install pypiwin32
    Python 封装DTU-215码流卡 第一天
    git apply -v 提示 Skipped patch 打不上patch的解决办法
    2019/10/29
    12/9/2019
    11/9/2019
    9/7/2019
    人生若有命中注定
  • 原文地址:https://www.cnblogs.com/duanguyuan/p/5683932.html
Copyright © 2011-2022 走看看