![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
二叉树
BananaScript
上至前后端人工智能,下至嵌入式树莓派,无所不能的IT全栈
展开
-
【leetcode/二叉树】二叉树的序列化和反序列化(前序+一点信息表示完整二叉树)
问题描述:序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。示例:你可以将以下...原创 2019-10-26 08:22:24 · 118 阅读 · 0 评论 -
【leetcode/二叉树】二叉树的最近公共祖先(递归+找节点路径)
问题描述:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root =[3,5,1,6,2,0,8,null,null,7,4]示例 1:输入:...原创 2019-10-19 14:43:25 · 721 阅读 · 0 评论 -
【leetcode/二叉树】填充每一个节点的下一个右侧指针二(简单递归)
问题描述:给定一个二叉树struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有next 指针都被设置为 NULL。示例:输入:{"$i...原创 2019-10-19 11:35:59 · 166 阅读 · 0 评论 -
【leetcode/二叉树】填充每一个节点下一个节点的右侧指针(简单递归)
问题描述:给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node { int val; Node *left; Node *right; Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有n...原创 2019-10-19 10:34:38 · 214 阅读 · 0 评论 -
【leetcode/二叉树】从前序和中序构造二叉树(二叉树综合)
题目描述:根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder =[3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7基本思路:这次采用了之前大牛的思路,主要是:建...原创 2019-10-19 10:05:27 · 233 阅读 · 0 评论 -
【leetcode/二叉树】从中序和后序遍历构造二叉树(树的综合题)
问题描述:根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder =[9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树: 3 / \ 9 20 / \ 15 7基本思路:我之前小学和初中的时候也碰到过这种,题...原创 2019-10-18 23:45:56 · 239 阅读 · 1 评论 -
【leetcode/二叉树】探索二叉树(布尔函数递归+空节点与叶子节点)
问题描述:路径总和给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明:叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ ...原创 2019-10-18 21:00:33 · 317 阅读 · 0 评论 -
【leetcode/二叉树】对称二叉树(叫啥递归都成)
问题描述:给定一个二叉树,检查它是否是镜像对称的。例如,二叉树[1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个[1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3说明:如果你可以运用递归和...原创 2019-10-18 20:25:44 · 54 阅读 · 0 评论 -
【leetcode/二叉树】二叉树的最大深度(自底向上的遍历)
问题描述:二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度3 。基本思路:如果我能够知道叶子节点自底向上...原创 2019-10-18 19:30:37 · 282 阅读 · 0 评论 -
【树】二叉树的层序遍历(树的BFS)
原来二叉树一共有4中遍历方法,分别是:preoder, inorder, postorder traversal。 类似于BFS的层序遍历。之前我们已经用非递归的方式编写了1中的三种遍历方式,今天我们用BFS来实现2:基本思路:没啥好想的,就是BFS,注意利用width记录是那一层的节点。AC代码:/** * Definition for a binary tree n...原创 2019-10-18 19:00:10 · 169 阅读 · 0 评论 -
【树】二叉树的后序遍历——非递归写法
树的前序和中序遍历我们都已经写完了,现在我们来写一下树的后序遍历的非递归写法。我自己的思路:一些基础的知识可以参看我之前的前序遍历的文章。总之我稍微模拟了一下,得出了以下重要结论:首先这个过程有点复杂,我们可能得用一个循环来多次执行,因为是不定次数的循环,所以我们选择while。 如何实现这个while循环?我的一个基本思路就是每次循环体只处理一个状态,然后转换成另一个状态,交给下一...原创 2019-10-18 18:42:16 · 2525 阅读 · 0 评论 -
【树】二叉树的前序遍历——非递归写法
今天碰到了这道题,写一下怎么实现树的前序遍历而不使用递归。基本思路:在我之前的博客中曾经写过,虽然递归和非递归有着紧密的联系(比如思想上),但是两者在编写上依然有很大差别。——主要体现在递归可以使用所谓整体法,而如果使用非递归的话用整体法很难想。 如果使用非递归的话怎么搞呢?我们只能先通过模拟,摸清大概是怎么做的,然后再来谈具体的实现。 谈到递归,不得不谈到栈这个数据结构——我们递归...原创 2019-10-18 13:20:23 · 340 阅读 · 0 评论 -
【树】二叉树中序遍历的三种实现方法
实现二叉树中序遍历的方法一共有3种,分别是:利用递归(实现最简单) 利用stack(编写稍微复杂) 利用Morris遍历构造线索二叉树(Threaded Binary Tree)——谁取的名字,把原来的意思完全混淆了。1. 递归:/** * Definition for a binary tree node. * struct TreeNode { * i...原创 2019-10-14 09:18:17 · 607 阅读 · 0 评论