
二叉树
种子选手席同学
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
关于二叉树的前序、中序、后序三种遍历
二叉树遍历分为三种:前序、中序、后序,其中序遍历最为重要。为啥叫这个名字?是根据根节点的顺序命名的。比如上图正常的一个满节点,A:根节点、B:左节点、C:右节点,前序顺序是ABC(根节点排最先,然后同级先左后右);中序顺序是BAC(先左后根最后右);后序顺序是BCA(先左后右最后根)。比如上图二叉树遍历结果前序遍历:ABCDEFGHK中序遍历:BDCAEHGKF后序遍历:DCBHKG...转载 2019-02-28 17:02:20 · 113 阅读 · 0 评论 -
[剑指offer] 二叉树中和为某一值的路径
题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。解题思路用前序遍历的方式访问到某一结点时,把该结点添加到路径上,并用目标值减去该节点的值。如果该结点为叶结点并且目标值减去该节点的值刚好为0,则当前的路径符合要求,我们把加入res数组中。如果当前结点不是叶结点,则继续访问它的子结点。当前结点访问...原创 2019-03-04 15:13:08 · 109 阅读 · 0 评论 -
[数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法
二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙。其衍生出各种算法,以致于占据了数据结构的半壁江山。STL中大名顶顶的关联容器——集合(set)、映射(map)便是使用二叉树实现。由于篇幅有限,此处仅作一般介绍(如果想要完全了解二叉树以及其衍生出的各种算法,恐怕要写8~10篇)。1)二叉树(Binary Tree)顾名思义,就是一个节点分出两个节点,称其为左右子节点;每个...转载 2019-03-03 22:59:17 · 466 阅读 · 0 评论 -
[剑指offer] 二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。解题思路二叉搜索树: 左子树<根<=右子树对于后序遍历来说,序列数组的最后一个元素一定是根节点, 根据这个元素,将前面的数组分为左、右两个部分,左侧部分都比该元素小,右侧部分都比该元素大,如果右侧部分有比该根节点小的元素,那么就不是后...原创 2019-03-03 22:53:19 · 147 阅读 · 0 评论 -
107 二叉树的层次遍历 II
二叉树的层次遍历 II给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7],3/ \9 20/ \15 7返回其自底向上的层次遍历为:[[15,7],[9,20],[3]]/** * Definition for a binary t...原创 2018-12-28 21:39:31 · 329 阅读 · 0 评论 -
leetcode 112. Path Sum
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。深度优先搜索方式来解题:(DFS)思路如下class Solution { public boolean hasPathSum(TreeNode root, int sum) { if (root == null) retu...原创 2018-12-30 19:40:53 · 102 阅读 · 0 评论 -
[剑指offer] 从上往下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。解题思路就是二叉树的层序遍历。借助一个队列就可以实现。使用两个队列一个存放节点,一个存放值。先将根节点加入到队列中,然后遍历队列中的元素,遍历过程中,访问该元素的左右节点,再将左右子节点加入到队列中来。注意Queue创建的方式:Queue queue = new LinkedList();用add将元素添加到队列中,用rem...原创 2019-03-03 21:36:30 · 94 阅读 · 0 评论 -
[剑指offer] 二叉树的镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义: 源二叉树 8 / \ 6 10 / \ / \5 7 9 11镜像二叉树 8 / \ 10 6 / \ / \11 9 7 5解题思路通过对以上两棵树的观察,我们可以总结出这两棵树的根节点相同,但它们的左、右两个子节点交换了位置。所以我...原创 2019-03-02 19:20:37 · 136 阅读 · 0 评论 -
java版遍历二叉树
首先编写二叉树类BinaryTree,代码如下:package package2;public class BinaryTree { int data; //根节点数据 BinaryTree left; //左子树 BinaryTree right; //右子树 public BinaryTree(int data) //实例化二叉树类 { t...原创 2019-03-04 22:38:36 · 1773 阅读 · 1 评论 -
[剑指offer] 二叉搜索树与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路题目可能比较难理解,可以看如下的图,我们有一棵二叉搜索树,要求得右边的双向链表。在二叉搜索树中,左子结点的值总是小于父结点的值,右子节点的值总是大于父结点的值。因此我们在转换成排序双向链表时,原先指向左子结点的指针调整为链表中指向前一个结点的指针,原先指向右子...原创 2019-03-04 22:16:32 · 147 阅读 · 0 评论 -
[剑指offer] 重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路我们知道,前序遍历的第一个节点就是树的根节点,所以我们先根据前序遍历序列的第一个数字创建根结点,接下来在中序遍历序列中找到根结点的位置,根节点...原创 2019-02-28 17:04:12 · 170 阅读 · 0 评论 -
剑指Offer-41-平衡二叉树
题目输入一棵二叉树,判断该二叉树是否是平衡二叉树。解析预备知识平衡二叉树:它是一棵空树,或者它的左右子树的高度差不超过1,同时它的左右子树为一棵二叉树。而衡量树和平衡因子说的就是左右子树的高度差,可以为0,1,-1。如下图它就是一棵平衡二叉树:思路一如何判断一棵树是否是平衡二叉树呢?可以根据预备知识的定义出发,我们只需确保树的左右子树的高度差不超过2即可,同样它的左右子树也要满足这样的...转载 2019-05-17 16:53:06 · 128 阅读 · 0 评论