树与二叉树【考研/408】

有序树的左右子树顺序固定

 

结点数=所有结点的度+1

度为m的树(m叉树)中i层上至多有m𝑖−1个结点i≥1

高度为h的m叉树至多有(𝑚h−1)/(m−1)个结点

具有n个结点的m叉树的最小高度为logm(𝑛(𝑚−1)+1)

 

总结点个数=总度数+1=0度的结点的个数+1度的结点的个数+……+n度的结点的个数

树的路径长度是指树根到每个节点的路径长的总和

 

 

满二叉树

第i个结点的双亲为i/2,左孩子为2i,右孩子为2i+1

 

边数=除了叶子结点之外的度的和

 

完全二叉树

共n个结点,第i个结点,若i≤n/2时,i为分支节点,否则i为叶子

若有度为1的结点,则只可能有一个,且该结点只有左孩子,如下图

若n为奇数,则每个分支节点都有左右孩子,若n为偶数,则最大的分支节点(n/2)只有左孩子

第i个结点在第log2𝑖+1层

有n个结点的完全二叉树的高度为log2𝑛+1

 

二叉排序树

左子树的关键字小于root,右子树的关键字大于root

 

平衡二叉树

树上任意结点的左右子树深度差不超过1

 

二叉树的性质

n0=𝑛2+1

高度为h的二叉树最多有2h−1个结点

 

 

二叉树的遍历和线索二叉树

选择主要考察遍历方式 遍历顺序 写出遍历序列,根据遍历序列选择遍历方式,线索二叉树的定义考过一次

 

先序遍历(NLR):

先访问根节点,再左,再右

void PreOrder(BiTree T){

if(T!=NULL){

visit(T);

PreOrder(T->lchild);

PreOrder(T->Rchild);

}

}

 

中序遍历(LNR):

先左,再根,再右

void PreOrder(BiTree T){

if(T!=NULL){

PreOrder(T->lchild);

visit(T);

PreOrder(T->Rchild);

}

}

 

后序遍历(LRN):

先左,再右,再根

void PreOrder(BiTree T){

if(T!=NULL){

PreOrder(T->lchild);

PreOrder(T->Rchild);

visit(T);

}

}

 

层次遍历:

一层一层遍历

算法需要辅助队列,把根入队,然后出队,出队时,访问出队结点的左右孩子,并依次入队

 

线索二叉树:

线索二叉树的结点结构

lchild

ltag

data

rtag

rchild

也就是 当tag为0时,指向孩子

   当tag为1时,指向前驱/后继结点

线索二叉树就考了一题选择

 

当前序序列为XY,后序序列为YX时,X是Y的祖先,通过把一个归到X,剩下结点归到Y依次分析出祖先子孙关系

 

 

  

树、森林、二叉树的转换

树的遍历:

先根遍历:先根 后依次遍历子树

后根遍历:先依次遍历子树 后根

森林的遍历:

先序遍历:

访问森林中第一棵树的根节点

先序遍历第一棵树中根节点的子树森林

先序遍历剩余的树构成的森林

中序遍历:

中序遍历第一棵树的根节点的子树森林

访问第一棵树的根节点

中序遍历剩余的树构成的森林

 

二叉树遍历的对应关系

森林

二叉树

先根遍历

先序遍历

先序遍历

后根遍历

中序遍历

中序遍历

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值