首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【算法】搜索二叉树,完全二叉树,平衡二叉树判断

1、概念 搜索二叉树(Binary Search Tree - BST) 它左子树不空,则左子树上所有结点值均小于它根结点值; 若它右子树不空,则右子树上所有结点值均大于它根结点值;...完全二叉树(Complete Binary Tree- CBT) 若设二叉树深度为h,除第 h 层外,其它各层 (1~h-1) 结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边。...经典应用:堆 平衡二叉树(Self-balancing binary search tree) 它是一 棵空树或它左右两个子树高度差绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。...总一句话就是,任意节点左右子树高度差不超过1 2、搜索二叉树判断 思路 由于搜索二叉树特性,根节点 > 左,根节点 < 右,那么其中序遍历顺序必然是升序。...思路 由于平衡二叉树要求任意左右子树高度差不超过1。

95931
您找到你想要的搜索结果了吗?
是的
没有找到

二叉树遍历应用:判断二叉树类别

昨天文章讲述了二叉树先序、中序和后序遍历方法(递归和非递归),但是这种遍历方法有什么意义么?...今天来讲讲这些算法可以用来做什么,只要稍加更改,我们就可以得到另外一个功能,只需要仅仅几行代码修改! 还记得上篇文章二叉树分类么?今天我们要来说三种树分类:完全二叉树、平衡二叉树和搜索二叉树!...平衡二叉树:每个节点左子树和右子树高度不能超过1,也就是小于等于1 搜索二叉树:按照中序遍历必定会得到一个有序数组,也就是当前节点值要大于左孩子值,小于右孩子值。...我们以下面的二叉树为例,其均符合以上三个类别! ?...判断二叉树类别 是否为平衡二叉树 这里面就存在一个套路,因为判断是否为平衡二叉树规则对于每个节点都是一致,也就是说当前节点左子树高度和其右子树高度高度差不能超过1,这就很显然可以使用一个递归函数来对每个节点进行遍历

49720

二叉树前序遍历 、二叉树最大深度、平衡二叉树二叉树遍历【LeetCode刷题日志】

一、二叉树前序遍历 方法一:全局变量记录节点个数 计算树节点数: 函数TreeSize用于递归地计算二叉树节点数。如果树为空(即根节点为NULL),则返回0。...leftDepth + 1 : rightDepth + 1; } 三、平衡二叉树 给定一个二叉树,判断它是否是高度平衡二叉树。...本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 左右两个子树高度差绝对值不超过 1 。 /** * Definition for a binary tree node....} 四、二叉树遍历 编一个程序,读入用户输入一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。...例如如下先序遍历字符串: ABC##DE#G##F### 其中“#”表示是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。

11010

二叉树刷题总结:二叉树属性

是否对称 给定一个二叉树,检查它是否是镜像对称。 image 上图为对称二叉树 image 上图二叉树则不是镜像 思路 判断是否是镜像,需要去判断二叉树里侧和外侧是否相同。...空间复杂度:O(H),其中 H 是树高度 二叉树最大深度 给定一个二叉树,找出其最大深度。 思路 二叉树深度是指根节点到最远叶子节点最长路径上节点数。...+1为二叉树最大深度。...可以看出, 求二叉树最小深度和求二叉树最大深度差别主要在于处理左右孩子不为空逻辑。...空间复杂度:O(h),h 为 树高度 平衡二叉树 给定一个二叉树,判断它是否是高度平衡二叉树

30310

相同树、对称二叉树、翻转二叉树

JavaScript实现LeetCode第100题:相同树 JavaScript实现LeetCode第101题:对称二叉树 JavaScript实现LeetCode第226题:翻转二叉树 这几道题其实很相似...相同树 题目描述 给定两个二叉树,编写一个函数来检验它们是否相同。 如果两个树在结构上相同,并且节点具有相同值,则认为它们是相同。...isSameTree(p.right, q.right); }; 时间复杂度:O(n),n 为树节点个数,因为每个节点都要访问一次 空间复杂度:最优情况(完全平衡二叉树)时为 O(log(N)),...对称二叉树 题目描述 给定一个二叉树,检查它是否是镜像对称。 例如,二叉树 [1,2,2,3,4,4,3] 是对称。...翻转二叉树 题目描述 翻转一棵二叉树

42620

二叉树链式结构实现和二叉树遍历以及判断完全二叉树

二叉树实现 定义结构体 我们首先定义一个结构来存放二叉树节点 结构体里分别存放左子节点和右子节点以及节点存放数据 typedef int BTDataType; typedef struct BinaryTreeNode...所谓二叉树遍历(Traversal)是按照某种特定规则,依次对二叉树节点进行相应操作,并且每个节点只操作一次。访问结点所做操作依赖于具体应用问题。...遍历是二叉树上最重要运算之一,也是二叉树上进行其它运算基础 按照规则,二叉树遍历有:前序/中序/后序递归结构遍历: 前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点操作发生在遍历其左右子树之前...设二叉树根节点所在层数为1,层序遍历就是从所在二叉树根节点出发,首先访问第一层树根节点,然后从左到右访问第2层上点,接着是第三层节点,以此类推,自上而下,自左至右逐层访问树结点过程就是层序遍历...二叉树是否为完全二叉树 判断是否未完全二叉树条件是什么呢 就是层序遍历完成时中间有无空节点!

5610

二叉树——111. 二叉树最小深度

1 题目描述 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点最短路径上节点数量。 说明:叶子节点是指没有子节点节点。...·空间复杂度:O(H),其中H是树高度。空间复杂度主要取决于递归时栈空间开销,最坏情况下,树呈现链状,空间复杂度为O(N)。...平均情况下树高度与节点数对数正相关,空间复杂度为O(log N)。 方法二:广度优先搜索 同样,我们可以想到使用广度优先搜索方法,遍历整棵树。...当我们找到一个叶子节点时,直接返回这个叶子节点深度。广度优先搜索性质保证了最先搜索到叶子节点深度—定最小。 复杂度分析 时间复杂度:O(N),其中N是树节点数。对每个节点访问一次。...·空间复杂度:O(N),其中N是树节点数。空间复杂度主要取决于队列开销,队列中元素个数不会超过树节点数。

26820

对称二叉树

前言 如果一颗二叉树和它镜像一样,那么它就是对称。实现一个函数用于判断一颗二叉树是否对称,你会怎么做? 本文将分享一种解决方案,欢迎各位感兴趣开发者阅读本文。...实现思路 在上一篇文章二叉树镜像中我们知道了此问题解决方案是前序遍历,那么我们可以修改下前序遍历算法,父节点遍历后,先遍历它右子节点,再遍历它左子节点,我们把这种算法称为:对称前序遍历 如下图所示两棵树...对称前序遍历:8, 9, 5, 7, 6, 7, 5 经过对比后,我们发现树A两种遍历方法得到结果是一样,那么它就是对称;树B结果不同,它就不是对称。...image-20220726203435638 如果有一颗不完全二叉树,它所有节点都相同,他是对称吗?...7 }, right: { key: 5 } } }; const isSymmetric = SymmetricBinaryTree(tree); console.log(tree, "是否为对称二叉树

23430

二叉树构建

1.构建方法 二叉树前序、中序和后序序列中任何一个都不能唯一确定一棵二叉树二叉树构建主要有两大方法。...第一种是中序序列和前、中,层次序列任一组合唯一确定一颗二叉树; 第二种是根据二叉树对应扩充二叉树先序或者后序序列来确定。注意扩充二叉树中序遍历序列是不能唯一确定二叉树结构。...上图中扩展二叉树中序遍历序列为:#B#D#A#C#,那么也可以对应为下面的扩展二叉树: ?...假设扩展二叉树前序遍历序列由键盘输入,root 为指向根结点指针,二叉链表建立过程是:首先输入根结点,若输入是一个“#”字符,则表明该二叉树为空树,即 root=NULL;否则输入字符应该赋给...6.扩充二叉树后序序列构建 本人尚未研究,请知道网友留言指教。 7.小结 本文内容还不够完善,如先序+中序构建二叉树可以用非递归方法来实现,等等,鄙人后续会继续完善。 ----

1.5K20

DS二叉树二叉树结点最大距离

题目描述 二叉树两个结点距离是一个结点经过双亲结点,祖先结点等中间结点到达另一个结点经过分支数。二叉树结点最大距离是所有结点间距离最大值。例如,下图所示二叉树结点最大距离是3,C和D距离。...二叉树用先序遍历顺序创建,#表示空树。计算二叉树结点最大距离和最大距离两个结点(假设二叉树中取最大距离两个结点唯一)。...输入 测试次数T 第2行之后T行,每行为一棵二叉树先序遍历结果(#表示空树) 输出 对每棵二叉树,输出树结点最大距离和最大距离结点,输出格式见样例。...而距离可以用深度来计算,这个满足条件左右子树深度加起来就是最大距离。 也就是说,我们需要找出每棵树左右子树深度之和,然后找出最大就是我们需要解,这个用一个递归函数可以完成。...对于一颗树,它最深末端叶子节点应该在深度最大子树那里,所以我们需要知道子树深度,再引入一个求深度函数,这个求树深度函数非常NB,是一个学长教,只用了三行代码搞定。

29930

二叉树镜像

前言 给定一颗二叉树,如何获取它镜像?本文将跟大家分享这个问题解决方案,欢迎各位感兴趣开发者阅读本文。 思路分析 当我们把一张写有文字纸放在镜子前面,你看到内容正好与你写内容是相反。...那么我们就可以依据照镜子经验画出它镜像了,如下所示: 镜像前后两棵树根节点相同 镜像后树与镜像前相比:它们左、右子节点交换了位置 image-20220713220838785 通过观察后,...我们就得出了一颗树镜像过程:先序遍历这棵树每个节点,如果遍历到节点有子节点,就交换它两个子节点。...当交换完所有非叶节点左、右子节点之后,就得到了树镜像。...对树遍历不了解开发者,请移步我另一篇文章:先序遍历 实现代码 想清楚思路后,我们就可以很顺利写出代码了,如下所示: export function MirrorImageOfTree(node:

17120

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券