二叉树和树
阳光丿洒脱
死亡不是终点,遗忘才是。
展开
-
详解 二叉搜索树-----AVL树
二叉搜索树根结点比左子树中所有结点都大根结点比右子树所有结点都小最小的元素在最左侧最大的元素在最右侧中序遍历有序具有以上的特征的二叉树就是二叉搜索树也叫二叉排序数二叉搜索树的操作查找插入树为空,则直接插入树不空,按二叉搜索树性质查找插入位置,插入新节点删除首先查找元素是否在二叉搜索树中,如果不存在,则返回, 否则要删除的结点可能分下面四种情况:要删除的结...原创 2019-10-15 17:32:07 · 703 阅读 · 0 评论 -
二叉树题目 ----7 前序中序遍历构造二叉树
前序中序遍历构造二叉树思路在前序中找根结点根据根结点 + 中序,分成左右两棵子树根据子树长度,把前序分成左右两颗子树递归处理子树/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct Tree...原创 2019-10-12 15:22:17 · 340 阅读 · 0 评论 -
二叉树题目----6 二叉树的最近公共祖先 AND 二叉树搜索树转换成排序双向链表
二叉树的最近公共祖先思路在左、右子树中分别查找是否包含p或q:如果以下两种情况(左子树包含p,右子树包含q/左子树包含q,右子树包含p),那么此时的根节点就是最近公共祖先如果左子树包含p和q,那么到root->left中继续查找,最近公共祖先在左子树里面如果右子树包含p和q,那么到root->right中继续查找,最近公共祖先在右子树里面 struct TreeNo...原创 2019-10-12 11:28:23 · 137 阅读 · 0 评论 -
二叉树题目----2 检查两颗树是否相同 和 对称二叉树的判定
检查两颗树是否相同思路根要相等 p->val == q->val左子树相等 isSameTree(p->left,q->left)右子树也要相等 isSameTree(p->right,q->right)/** * Definition for a binary tree node. * struct TreeNode { * in...原创 2019-10-06 10:29:47 · 192 阅读 · 0 评论 -
二叉树题目---3 另一个树的子树 AND 二叉树最大深度
另一个树的子树原创 2019-10-07 09:25:45 · 140 阅读 · 0 评论 -
二叉树题目----4 前序遍历重构二叉树 AND 求二叉树中所有结点的个数
前序遍历重构二叉树思路整个二叉树用数组存储因为先序遍历它先遍历根,再遍历左,左边没有跑完是不会去遍历右边的,所以遍历左子树,就是数组元素每回向后一个,个数-1遍历右边时,就是数组起始位置+左子树跑到的位置+每次往后走一个,大小就是减去左子树用掉的个数+每回个数-1因为要返回遍历的位置,和遍历用掉的个数,所以每回都要返回两个值,用结构体返回。#include<stdlib....原创 2019-10-07 10:44:49 · 180 阅读 · 0 评论 -
二叉树的进阶操作---(求二叉树中所有结点个数,求叶子结点个数,求第k层结点个数;在二叉树中查找某一结点;层序遍历;判断是否为完全二叉树)
typedef struct TreeNode{ struct TreeNode *left; struct TreeNode *right; char val;}TreeNode;typedef struct Result{ TreeNode * root; //构建的树的根结点 int used; //构建过程中用掉的val个数} Result;求二叉树中...原创 2019-10-08 17:20:35 · 1168 阅读 · 0 评论 -
二叉树题目----5 平衡二叉树 AND 根据二叉树创建字符串
平衡二叉树/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */int MAX(int a,int b){ return a > b...原创 2019-10-11 16:01:45 · 168 阅读 · 0 评论 -
再写堆(堆的性质,向下调整,建堆,堆的插入删除初始化,堆排序,TopK问题)
堆的概念如果有一个关键码的集合K={k0,k1,k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储再一个一维数组中,并满足:Ki<=K2i+1且Ki<=K2i+1(Ki >= K2i+1 且 Ki >= K2i+2),i=0,1,2,3…。则称为小堆(或大堆)。将根结点最大的堆叫做最大堆或大根堆,根结点最小的堆叫做最小堆或小根堆堆的性质堆中某个节点的...原创 2019-10-11 19:05:32 · 470 阅读 · 0 评论 -
二叉树题目----1 前序中序后序遍历二叉树并返回相应的遍历(不是打印)
前序遍历/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; *//** * Note: The returned array must be ma...原创 2019-10-06 09:06:57 · 143 阅读 · 0 评论 -
再谈二叉树(二叉树概念,二叉树的性质,二叉树的存储结构)
树的概念树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多 个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结 点可以分为多个不相交的子树一些基本概念节点的度:一个节点含有的子树的个数称...原创 2019-10-06 08:54:03 · 283 阅读 · 0 评论 -
用c语言构建二叉树(重点)
结点创建二叉树创建我们以‘#’为NULL,我们要把输入进来的一个字符串转变为二叉树,所以我们要记住递归的每一步走到数组了哪个位置所以我们要记住创建过程中用掉的前序个数,并返回,除此之外,还要加上当时的那个结点。要返回两个返回值,所以用一个结构体来把这两个返回值包括并一起返回(在c语言中)我们不要老想着好多结点,我们只看一个结点,一个结点的二叉树怎么创建,那么整个二叉树就怎么创建,只要把...原创 2019-04-03 23:13:11 · 5163 阅读 · 0 评论 -
关于树和二叉树的一些基本概念,基本名词解释。
二叉树的概念概念一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。二叉树的特点:每个结点最多有两棵子树,即二叉树不存在度大于2的结点。二叉树的子树有左右之分,其子树的次序不能颠倒。特殊二叉树满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数...原创 2019-03-31 22:44:10 · 1587 阅读 · 0 评论 -
二叉树的相关题(叶子结点个数,最大深度,找特殊值结点(值不重复),判断两个树是否相同,判断两个数是否为镜像树,是否为子树,)
叶子结点就是没有孩子结点,所以当当前根结点没有孩子结点的时候,就返回1,就是找到一个叶子结点,然后访问完每个不为空的结点就行,每次访问都是把当前结点的左/右结点作为新的结点,来判断。求最大深度,也就是有多少层,不要管其他结点,单独拿一个结点来看,如果这个结点为空,怎返回0,0层。否则看这个结点的左结点和右结点存不存在,也就是右边和左边进行比较,取大的那个,最后再加上根结点的这一层,然后递归,每...原创 2019-03-31 22:37:34 · 212 阅读 · 0 评论 -
二叉树的操作(前,中,后序遍历也叫深度优先遍历,非空结点的个数)递归实现
定义一个二叉树的结点二叉树的前序遍历,先访问根结点,再访问左,再访问右。每次访问都要先看根结点是否为空,然后打印根结点,把此时根结点的左结点作为下一次递归的根结点,当把左结点遍历完后,再遍历右结点。其实很好想,每回只看一个结点,想一个结点怎么遍历,再用递归一写就行,实在不行就用笔画一画,多用脑子把程序跑几遍就好。中序遍历,先访问左结点,再访问根结点,最后访问右结点。后序遍历只要...原创 2019-03-31 21:52:45 · 345 阅读 · 0 评论 -
用前序中序创建二叉树(用中序后序创建二叉树)
定义二叉树结点比如就拿这个二叉树前序中序创建因为前序遍历的顺序是 根 , 左 ,右。中序的遍历是 左 根 右。我们会很不好想,但我们可以用前序和中序把上面那个二叉树的遍历一边 前序遍历:ABDEHCFG 中序遍历:DBEHAFCG然后根据这我们来想创建的时候,值都是以数组的形式传进来,所以找到根节点,前序和中序左子树个数一定相等,都是r。前序和中序创建左子树的时候...原创 2019-04-05 22:52:23 · 8558 阅读 · 1 评论 -
非递归实现二叉树(前序,中序,后序)c/c++实现
这里还是用到栈的思想,为了方便用了c++的一些内容,把出栈,进栈,读栈顶元素用一个个函数封装起来了,前面做了一些处理来使用这些函数。前序非递归思想:一直走左边,依次进栈。等左边为空的时候,返回,也就是读栈顶元素,读一个出一个,并让cur指向它的右边,把它的右边的结点当作根结点,再走一边上面的过程。中序非递归前序是在访问根结点时打印,中序是先访问左结点,所以在指向左结点时打印,也就是...原创 2019-04-05 23:44:10 · 468 阅读 · 0 评论 -
二叉搜索树
二叉搜索树中序有序原创 2019-04-05 23:47:24 · 109 阅读 · 0 评论 -
堆(概念,数据结构中堆与内存堆区的区别 ,堆的基本操作)
堆的特性:必须是完全二叉树用数组实现任一结点的值是其子树所有结点的最大值或最小值最大值时,称为“最大堆”,也称大根堆;最小值时,称为“最小堆”,也称小根堆。大根堆小根堆可以看到,对于**堆(Heap)**这种数据结构,从根节点到任意结点路径上所有的结点都是有序的。数据结构中堆与内存堆区的区别一、数据结构中的堆和栈 堆和栈在数据结构中是两种不同的数据结构。 两者都是数据...原创 2019-04-12 19:53:04 · 24778 阅读 · 6 评论 -
二叉树的广度优先遍历(层序遍历)
先定义一个二叉树的结点再创建二叉树,这里就不写了,之前的有创建二叉树的博客。层序遍历用到栈的思想, 1 先让根 节点进栈, 2 然后读栈顶元素, 3 让他出栈 4 打印它的值 5 让栈顶元素的左右子树进栈,当它的左右子树都不为空时执行 6 并一直执行此操作,直到遍历完当栈中无元素时,便把整个树遍历完了。...原创 2019-04-05 22:13:58 · 1838 阅读 · 0 评论