数据结构 | 二叉树

树和二叉树:这一章中我们从顺序式的数据结构,转向层次式的数据结构,要掌握树、二叉树的各种性质、树和二叉树的不同存储结构、森林、树和二叉树之间的转换、线索化二叉树、二叉树的应用(二叉排序树、平衡二叉树和Huffman树),重点要熟练掌握的,是森林、树以及二叉树的前中后三种遍历方式,要能进行相应的算法设计。这一部分是数据结构考题历来的重点和难点,复习时要特别关注。

一些常见的选择题考点包括:满二叉树、完全二叉树节点数的计算,由树、二叉树的示意图给出相应的遍历序列,依据二叉树的遍历序列还原二叉树,线索化的实质,计算采用不同的方法线索化后二叉树剩余空指针域的个数,平衡二叉树的定义、性质、建立和四种调整算法以及回溯法相关的问题。

常见的综合应用题考点包括:二叉树的遍历算法,遍历基础上针对二叉树的一些统计和操作(比如结点数统计、左右子树对换等等),判断某棵二叉树是否二叉排序树,以上这些都要求能用递归的和非递归的算法解决,特别要重视非递归的算法,线索化后二叉树的遍历算法,如查找某结点线索化后的前驱或后继结点的算法以及给出Huffman编码等等。



引入树的概念是因为vector和list没有办法兼顾静态和动态的高效性。而树将二者的优点融合起来了。树是非线性结构

树中所有边数e=所有节点r的度数之和=顶点数-1
路径长度=边数

连通图:节点之间均有路径。
树:无环连通图、极小连通图、极大无环图

任意节点都与根节点之间有唯一的路径。

特别下,空树的高度取为-1;

在这里插入图片描述二叉树

  • 深度为k的节点,至多2的k次方个
  • 含n个节点、高度为h的二叉树中
h<n<2*2^h
  • 当所有的节点都是满2的时候,就是满二叉树。
    在这里插入图片描述
  • 真二叉树:子节点数目为0或者2

多叉树转二叉树
参考这个:
https://blog.csdn.net/c20190102/article/details/69946551

  • 有根有序的树都可以转为二叉树
    二叉树的实现
    二叉树实现的一些模板??插入删除、计算高度等?
    先序遍历根左右
    递归实现
//手写代码
template <typename T, typename VST> //元素类型、操作器
 void travPre_R ( BinNodePosi(T) x, VST& visit ) {
    //二叉树先序遍历算法(递归版)
    if ( !x ) return;
    visit ( x->data );
    travPre_R ( x->lc, visit );
    travPre_R ( x->rc, visit );
 }

迭代实现

//从当前节点出发,沿左分支不断深入,直至没有左分支的节点;沿途节点遇到后立即访问
0010 template <typename T, typename VST> //元素类型、操作器
0011 static void visitAlongVine ( BinNodePosi(T) x, VST& visit, Stack<BinNodePosi(T)>& S ) {
   
0012    while ( x ) {
   
0013       visit ( x->data ); //访问当前节点
0014       S.push ( x->rc ); //右孩子入栈暂存(可优化:通过判断,避免空的右孩子入栈)
0015       x <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值