二叉树
来源:互联网 发布:linux查看进程端口 编辑:程序博客网 时间:2024/06/11 18:07
树的一些概念:(有些博客是错的,故此记一下)
树中节点
n的高:n到一片树叶最长路径的长,树高等于根高,叶子高为0;
n的深度:从根到n的唯一路径的长,根深度为0,树深等于最深的叶子的深度
深度等于树高(数值上),注意区分,二者不等同;
二叉树性质:
1、非空二叉树的第n层上至多有2^(n-1)个元素。(n从1开始)
2、深度为h的二叉树至多有2^(h+1)-1个结点。
二叉树:
每个节点都不能有多于两个的儿子;
满二叉树:
一颗深度为k且有2^(k+1)-1个结点的二叉树称为满二叉树(回顾二叉树的性质,每个位置都填满了,这就是满的意思)。
除叶子结点外的所有结点均有两个子结点。节点数达到最大值。所有叶子结点必须在同一层上。
完全二叉树:
若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。(深度k-1的节点要不无叶子节点,要不至少含有左叶子节点)
存储结构
顺序存储:保存在数组中,数组的每一个元素是一个结构体,指明了元素值,左右子节点的位置(在数组中的下标),这种方法据说占空间,我觉得主要是难扩展,比较非主流
链式存储:保存在类似链表的结构中,每个节点也是一个结构体,指明了元素,左右子节点的指针;
递归实现二叉树的遍历:
示例代码:
#includeusing namespace std;typedef struct node{ char inode; node *left; node *right;}NODE ,*PNODE;void preout(PNODE tr)//前序{ if(tr!=NULL) { cout left); preout(tr->right); }}void midout(PNODE tr)//中序{ if(tr!=NULL) { midout(tr->left); cout right); }}void finout(PNODE tr)//后序{ if(tr!=NULL) { finout(tr->left); finout(tr->right); cout c; if(c=='%') *tr=NULL; else { *tr=new NODE; (*tr)->inode=c; creatree(&(*tr)->left); creatree(&(*tr)->right); } //cout< inode << endl; return 0;}
结果:第一行为输入利用前序遍历生成树,其余为前,中,后序输出
无叶子节点输入'%'
阅读全文
0 0
- 二叉树、二叉堆
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二十一、React顶级API
- 装饰模式 Decorator Pattern
- 《深度学习原理与TensorFlow实践》学习笔记(一)
- 解决类似/usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.19' not found错误
- Python3学习笔记3-try and except, comment, \(back-slash)
- 二叉树
- passing 'char[16]' to parameter of type 'const u8*' (aka 'const unsigned char*') converts between p
- java基础之数组的介绍
- CSS滤镜效果属性filter
- 求js数组的最大值和最小值的四种方法
- 神经网络为什么要归一化
- scala学习笔记 之 函数
- 七月读书表
- Node.js基础知识点&npm常用命令