题目链接 https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId=0&tqId=0&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题意 判断一棵树是否为平衡二叉树 思路 法一,定义版:按定义,自上而下遍历树,会有重复计算. 法二,优化版:自下而上遍历树,若不平衡则返回-1,至多遍历树一遍.…
html, body { font-size: 15px; } body { font-family: Helvetica, "Hiragino Sans GB", 微软雅黑, "Microsoft YaHei UI", SimSun, SimHei, arial, sans-serif; line-height: 1.6; color: ; background-color: ; margin: 0; padding: 16px 20px; } h1, h2, h…
剑指Offer - 九度1520 - 树的子结构2013-11-30 22:17 题目描述: 输入两颗二叉树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…
问题描述 输入一棵二叉树的根节点,判断该树是不是平衡二叉树.如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树. 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 返回 true . 示例 2: 给定二叉树 [1,2,2,3,3,null,null,4,4] 1 / \ 2 2 / \ 3 3 / \ 4 4 返回 false . 限制: 1 <= 树的结点个数 <= 10000 代码 /** * Defi…
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目分析 分析如何判断树B是不是树A的子结构,只需要两步.很容易看出来这是一个递归的过程.一般在树的求解方面都和递归有关. Step1.在树A中找到和B的根结点的值一样的结点R: Step2.判断树A中以R为根结点的子树是不是包含和树B一样的结点. 代码 /* function TreeNode(x) { this.val = x; this.left = null; this.right =…
  题目描述:   输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构)   解题思路:   要查找树A中是否存在和树B结构一样的子树,我们可以分为两步:第一步,在树A中找到和树B的根结点值一样的结点R:第二步,判断树A中以R为根结点的子树是不是包含和树B一样的结构.   对于这两步,第一步实际上就是树的遍历,第二步是判断是否有相同的结构,这两步都可以通过递归来实现.   举例:   编程实现(Java): public boolean HasSubtree…
问题描述: 输入两棵二叉树A和B,判断B是不是A的子结构.二叉树结点的定义如下: public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } 思路1: 递归 public static boolean HasSubtree(TreeNode root1,TreeNode root2) { boolea…
#@ root: the root of searched tree #@ nodeToFind: the tree-node to be found #@ path: the path from root to node #@@ #@@ search tree referenced by root, and return the path #@@ from root to node, if node not exist, path = [] #@@ def getPath(root, node…
题目: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. public class Solution { ArrayList<Integer> list = new ArrayList<Integer>(); public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { if(root==null) return list; TreeNode node = root; Queue<TreeNo…
类似于字符串的匹配,我们总是找到第一个匹配的字符,在继续比較以后的字符是否所有同样,假设匹配串的第一个字符与模式串的第一个不同样,我们就去查看匹配串的下一个字符是否与模式串的第一个同样,相应到这里,就是我们要遍历root1,找到与root2同样的第一个结点,若root1的根不同样,那么我们查找其左子树是否有第一个同样的,同样的操作再去看右子树是否有同样的第一个,若找到了第一个同样的,与字符串匹配思想一样,字符串匹配中,是比較以后的字符是否所有同样,这里我们比較其左右子树是否 也相应同样,若找到了…