二叉树的遍历方法
我叫程序猿
致力于让解题速度超过LeetCode更新速度
展开
-
【剑指offer#22】从上往下打印二叉树--Java代码
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 考察队列的使用 Queue queue =new LinkedList<>(); 树的初始化: public class TreeNode(){ int val; TreeNode left=null; TreeNode right=null; public TreeNode(int val){ this.val=val; } } import java.util.ArrayList; import ja原创 2021-03-25 09:30:20 · 40 阅读 · 0 评论 -
【剑指offer#17】树的子结构--Java代码
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 解析:本题考虑递归,一般情况下,考察树的代码,大多数都是使用递归法解答。 /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } }原创 2021-03-24 10:32:48 · 42 阅读 · 0 评论 -
【剑指offer#4】重建二叉树--Java代码
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 解析:本题考察递归,先序遍历和中序遍历的递归版以及非递归版都要掌握,以及后序的递归和非递归; 相关知识点:树的定义; public class TreeNode { int val; TreeNode left; TreeN原创 2021-03-22 09:30:04 · 45 阅读 · 0 评论 -
【剑指offer】对称的二叉树--Java代码
题目描述 请实现一个函数,用来判断一棵二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 解析:这一题写了很久,一直想用层次遍历二叉树来解决这道题目,可惜后面发现还是做不出来,层次遍历需要考虑的特殊条件太多了,所以后面放弃了。 这一题还是老老实实用递归写吧,判断一下是镜像的条件,再加上递归。 /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = nu原创 2021-03-16 16:31:52 · 74 阅读 · 0 评论 -
【剑指offer#57】二叉树的下一个结点--Java代码
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 解析:比较暴力的解法是根据给出的结点,找到二叉树的根节点,再根据二叉树的中序遍历,找到和给出的结点相同的结点并作标记,下一次的结点输出即是答案。若遍历完成都没有找到,返回null。重点考察二叉树的中序遍历。 import java.util.Stack; /* public class TreeLinkNode { int val; TreeLin原创 2021-03-16 10:47:34 · 82 阅读 · 0 评论 -
【剑指Offer】判断二叉树是否是一个平衡二叉树
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树 平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 解析:本题明面上考察的是平衡二叉树,但是实际上还是考察的是遍历二叉树的深度,因为使用递归法遍历二叉树的深度,会自底向上遍历各个节点的左右子节点的深度,那么即可以用该过程中产生的深度信息来判断当前节点是否是平衡二叉树。因此,只需要原创 2021-03-11 17:46:28 · 57 阅读 · 0 评论 -
【剑指Offer】求二叉树的最大深度
题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 代码一:用递归求解 public class Solution { public int TreeDepth(TreeNode root){ if (root==null)return 0; int left=TreeDepth(root.left); int right=TreeDepth(root.right);原创 2021-03-11 15:43:25 · 90 阅读 · 0 评论 -
【图文详解】二叉树的先序,中序,后续遍历(递归和非递归-Java代码实现)
1.首先给出二叉树的节点类 /* public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode next = null; TreeLinkNode(int val) { this.val = val; } } */ 2.递归遍历二叉树的三种方法为了简单起见,将三种递归遍历放在一起,递归遍历思路大体一原创 2021-03-16 11:35:39 · 154 阅读 · 0 评论