![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
二叉树
Jaster_wisdom
程序员
展开
-
二叉树遍历(先序、中序、后序)
首先,根据输入的字符串建立一棵二叉树,这里的字符串默认是先序。用#表示空的结点比如:ABDG##H##E##CK##FI#J####include using namespace std;typedef struct Node{ char key; struct Node *left; struct Node *right;}Node,*Tr原创 2016-05-12 21:09:42 · 696 阅读 · 0 评论 -
LeetCode106. 从中序与后序遍历序列构造二叉树
题目分析:本题与“从前序与中序遍历序列构造二叉树”属于一个套路。唯一的区别是,我们是从后序序列的最后一个节点得到根节点,同样的,再去前序序列中找到这个节点。在这个节点左侧的属于根节点的左子树部分,右侧的属于根节点右子树部分。然后根据左右子树节点的数量,在后序序列中找到他们各自的后序序列。若左子树节点个数为3,那么在后序序列中前三个节点就是左子树节点,之后的节点除了最后一个节点都是右子树节点。将in...原创 2018-07-11 17:31:32 · 1194 阅读 · 0 评论 -
LeetCode108. 将有序数组转换为二叉搜索树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -1...原创 2018-07-24 08:30:02 · 261 阅读 · 0 评论 -
LeetCode110. 平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null...原创 2018-07-24 20:16:03 · 1132 阅读 · 0 评论 -
LeetCode113. 路径总和 II
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ ...原创 2018-07-24 21:23:37 · 489 阅读 · 0 评论 -
LeetCode98. 验证二叉搜索树
题目大意:判断给定的二叉树是不是二叉搜索树。满足二叉搜索树的条件是:节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。题目分析:我们可以求出该二叉搜索树的中序遍历序列,我们知道,如果一个二叉树是二叉搜索树,那么它的中序序列是递增的。所以我们只要判断该中序序列是否是递增的,就可以了。代码展示:class Solu...原创 2018-07-19 21:14:10 · 413 阅读 · 0 评论 -
LeetCode129. 求根到叶子节点数字之和
给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。例如,从根到叶子节点路径 1->2->3 代表数字 123。计算从根到叶子节点生成的所有数字之和。说明: 叶子节点是指没有子节点的节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 25解释:从根到叶子节点路径 1->2 ...原创 2018-07-28 14:26:46 · 637 阅读 · 0 评论 -
LeetCode96. 不同的二叉搜索树
给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 ...原创 2018-07-21 20:10:05 · 804 阅读 · 0 评论 -
LeetCode114. 二叉树展开为链表
给定一个二叉树,原地将它展开为链表。例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为:1 \ 2 \ 3 \ 4 \ 5 \ 6题目分析:由题目的例子,我们可以通过以下几步来展开二叉树:1.首先,将根节点的...原创 2018-07-28 10:30:20 · 1440 阅读 · 0 评论 -
LeetCode116. 填充同一层的兄弟节点
给定一个二叉树struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。说明:...原创 2018-07-28 10:54:32 · 344 阅读 · 0 评论 -
LeetCode144. 二叉树的前序遍历
二叉树的前序遍历主要有两种方法实现:1.递归实现:class Solution {public: vector<int> preorderTraversal(TreeNode* root) { vector<int> ans; preorder(ans,root); return ans; } ...原创 2018-08-01 17:15:00 · 715 阅读 · 0 评论 -
LeetCode145. 二叉树的后序遍历
1.递归实现:class Solution {public: vector<int> postorderTraversal(TreeNode* root) { vector<int> ans; postorder(ans,root); return ans; } void postor...原创 2018-08-01 18:47:02 · 456 阅读 · 0 评论 -
LeetCode199. 二叉树的右视图
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释: 1 <--- / \2 3 <--- \ \ 5 4 <---题目分析:本题的大意即求一...原创 2018-08-14 16:23:26 · 592 阅读 · 0 评论 -
LeetCode105. 从前序与中序遍历序列构造二叉树
题目分析:根据前序的第一个节点就可以确定二叉树的根节点,然后在中序序列中找到该节点。位于该节点左侧的是根节点的左子树,位于该节点右侧的是根节点的右子树。然后根据左右子树节点的数量可以在前序序列中知道各自子树的前序序列。假设左子树节点的数量为3,那么除了前序的第一个节点,往后数三个就是该左子树的节点的前序序列,相应地,后面的节点就是右子树节点的前序序列。将preorder[pl.....pr]记作前...原创 2018-07-11 17:06:12 · 1410 阅读 · 0 评论 -
LeetCode94. 二叉树的中序遍历
递归代码展示:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; ...原创 2018-07-04 21:22:05 · 823 阅读 · 0 评论 -
九度OJ 1078
题目描述:二叉树的前序、中序、后序遍历的定义:前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树;中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树;后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。输入:原创 2016-05-31 21:51:44 · 706 阅读 · 0 评论 -
哈夫曼编码 C++实现
首先,根据输入的字符串确定每个字母的频率,也就是权值,然后构造哈夫曼树,进行编码。解码就是从根节点不断往下查找,直到叶节点的过程。看哪个字符与从某序列匹配。#include #include #include using namespace std;struct node{ //哈夫曼树的结点 char ch; int frequent; node *lc原创 2016-05-19 21:56:09 · 2945 阅读 · 1 评论 -
满二叉树、完全二叉树、平衡二叉树、哈夫曼树
最近做各大公司的笔试题,发现二叉树这块考得还是比较多的。在笔试中,我看到了一道选择题,问哈夫曼树是不是满二叉树、是不是完全二叉树?当时哪记得清,什么二叉树的概念全忘光了。。下面特地做了总结。满二叉树:除了叶节点外每一个结点都有左右子女且叶节点都处在最底层的二叉树。这个满二叉树应该很好想象,就是一颗非常完美的树,除了叶节点其他节点都有两个孩子。完全二叉树:只有最下面的原创 2016-05-21 22:16:33 · 11495 阅读 · 10 评论 -
二叉排序数的基本操作(构造、插入、删除)
首先,给出二叉排序树的定义:二叉排序树是一棵二叉树,它或者为空,或者满足以下条件:1.若左子树不空,则左子树上所有结点的值均小于根的值2.若右子树不空,则右子树上所有结点的值均大于根的值3.其左右子树均为二叉排序树我们根据定义可以知道,二叉排序树的中序序列是非降序序列在本文中,主要涉及二叉排序树的三大操作,构造,插入,删除节点1.构造二叉排序树用户输入节点的原创 2016-05-23 21:58:51 · 1951 阅读 · 0 评论 -
九度OJ 1009 二叉搜索树
题目描述:判断两序列是否为同一二叉搜索树序列输入:开始一个数n,(1接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。输出:如果序列相同则输出YES,否则输出NO样例输入:2原创 2016-06-22 22:49:36 · 759 阅读 · 0 评论 -
从B树到B+树
最近在看操作系统和数据库系统,当涉及到查找文件和建立数据库索引时书中反复提到使用B+ 树可以实现高效的查找,于是我迫不及待地想研究一下B+ 树的内部结构。首先从二叉查找树开始讲起。二叉搜索树(BinarySearch Tree),别名又叫二叉查找树,二叉排序树。它是一棵空树或者是满足以下条件的二叉树:它的左子树不空,则左子树上所有的结点的值均小于它的根节点的值;若它的右子树不空原创 2016-08-27 11:37:12 · 901 阅读 · 0 评论 -
K近邻法、kd树
本篇博客主要介绍K近邻法的主要思想。K近邻法:分类时,对新的实例,根据其K个最近邻的训练实例的类别,通过多数表决等方式进行预测。三个基本要素:K值的选择、距离度量、分类决策规则k值的减小意味着整体模型变得复杂、容易发生过拟合 k值的增大意味着整体的模型变得简单K近邻法最简单的实现方法时线性扫描,这时需要计算输入实例与每一个训练实例的距离。当训练集很大时,计算非常耗时。下面采用kd树优化其存储结构,原创 2017-10-15 20:16:25 · 652 阅读 · 0 评论 -
LeetCode100. 相同的树
给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1 1 / \ / \ 2 3 2 3 [1,2,3], [1,2,3]输出: true示例 2:输入: 1 1 ...原创 2018-07-09 08:16:36 · 280 阅读 · 0 评论 -
LeetCode101. 对称二叉树
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [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代码展示:/** * Definition for a binary...原创 2018-07-09 20:49:06 · 412 阅读 · 0 评论 -
LeetCode. 102 二叉树的层次遍历
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]本题我是利用BFS遍历来实现,按层将节点不断压入队列,因为同一层的节点是在一个vector中的...原创 2018-07-09 21:44:06 · 518 阅读 · 0 评论 -
LeetCode111. 二叉树的最小深度
解析:求二叉树的最小深度,即求从根节点到任一子节点,深度的最小值。本题类似求二叉树的最大深度,都是用递归求解。二叉树的最大深度:分别求出根节点左孩子和右孩子的深度,然后将两者中较大值加1返回即可。同样的,求解二叉树的最小深度,我们要比较两者中的较小值加1返回。但还有一点要注意,就是如果一棵二叉树只有左子树,或者只有右子树。那么最小深度为从根节点到子节点的深度,而不是输出1,表示只有一个根节点。代码...原创 2018-07-10 10:10:51 · 296 阅读 · 0 评论 -
LeetCode226. 翻转二叉树
翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1代码展示:/** * Definition for a binary tree node. * struct TreeNode { ...原创 2018-08-20 22:22:40 · 451 阅读 · 0 评论