![](https://img-blog.csdnimg.cn/5e1077fe92114675880e90e7d6da6d54.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
二叉树
文章平均质量分 50
此分类为个人在学习数据结构的笔记内容
白布鸽
比较有个性的签名
展开
-
LeetCode450.删除二叉搜索树中的节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。3 左右节点都不为空(*)我自己的代码就是在这个地方变得又臭又长的,学习了大佬的方法,真没想到啊。2 左右节点有一个为空一个不为空,就让不为空的做目标节点父节点的子树。3.1 将目标节点的左子树移到目标节点中序遍历后继节点的左子树上。3.2 将目标节点的右子树移到目标节点中序遍历前驱节点的右子树上。我这里用的是3.1的方法。原创 2023-11-09 21:16:20 · 49 阅读 · 0 评论 -
LeetCode106. 从中序与后序遍历序列构造二叉树
看我上面画的屎图,整棵树的根节点由后序的特性一定是在最后一个,也就是3,然后去中序数组可以确定3在哪,也就确定了整棵树的左子树和右子树有哪些节点,然后根据中序左子树和右子树的长度去确定后序数组中,左子树和右子树的后序遍历是哪些,然后去递归就行。给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树。轻喷,这种还是手写方便。原创 2023-11-07 19:10:24 · 55 阅读 · 0 评论 -
LeetCode222.完全二叉树的节点个数
这里的方法就是让左右两个指针分别向左和右下去,直到它们的left(右指针为right)为空,也就是分别统计左右子树的高度(因为是完全二叉树,可以这么求高度的),如果左右高度相同,那就用满二叉树的特性就可以求出当前树的节点个数;完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。我自己的解题时复是O(n),题目的进阶写法是设计出来一个时复小于n的,我没想出来。原创 2023-11-06 18:43:56 · 55 阅读 · 0 评论 -
LeetCode111.104二叉树的最大最小深度
其实这道题使用层序遍历来统计最小深度是最合适的,因为递归总是需要遍历完所有节点才结束的,层序遍历会比递归快一半左右。这里用的递归的方法,分别计算根节点左右子树的最大深度,大的那一方+1就是此二叉树的最大深度。这里我是用的递归方法来找到所有的叶子节点,然后用当前深度和最小深度做对比。深度(叶子节点到根节点长度),最大最小深度这里不多赘述。原创 2023-11-05 19:08:11 · 44 阅读 · 0 评论 -
LeetCode101.对称二叉树
从下面的代码开始说起,递归到最后一个节点(也是第一个执行递归主代码的节点)一定是图中标出的①的值为5的节点,左侧5的左节点和右侧5的右节点都是空,返回true,继而判断左侧5的右节点和右侧5的左节点,也都是true,所以左右5节点返回true;一直递归值根节点1。队列实现的迭代法是一层层地去判断是否对称的,我这里的顺序是左侧的左节点和右侧的右节点进行对称判断然后再判断左侧的右节点和右侧的左节点。由于我的方法跑出来的结果不太好,所以找了大佬们的方法来看,发现递归方法是最优方法,迭代法倒不是那么高效。原创 2023-11-05 14:24:24 · 23 阅读 · 0 评论 -
LeetCode102.二叉树的层序遍历
上面的代码是以前记住的一种写法,实现起来略显繁复,需要统计当前层的数量和下一层的数量,写的时候都不大好搞。给你二叉树的根节点 root ,返回其节点值的 层序遍历。(即逐层地,从左到右访问所有节点)换一种写法,代码好写一点。原创 2023-11-03 08:00:51 · 18 阅读 · 0 评论