《大话数据结构》笔记08-二叉树<下篇>

  1. 遍历二叉树
    1. 前序遍历
    2. 中序遍历
    3. 后序遍历
    4. 层序遍历
    5. 推到遍历结果
  2. 二叉树的建立
  3. 线索二叉树

遍历二叉树

前序遍历

规则是若二叉树为空,则空操作返回,否则先访问跟结点,然后前序遍历左子树,在前序遍历右子树。
ABDGHCEIF

/* 二叉树的前序遍历递归算法 */
void PreOrderTraverse (BiTree T){
  if (T==NULL) {
    return;
  }
  printf ("%c", T->data); /* 显示结点数据,可以更改为其他对结点操作 */
  PreOrderTraverse(T->lchild); /* 再先序遍历左子树 */
  PreOrderTraverse(T->rchild); /* 最后先序遍历右子树 */
}

中序遍历

规则是若二叉树为空,则空操作返回,否则从跟结点开始(并不是先访问根结点),中序遍历根结点的左子树,然后是访问右子树,最后中序遍历右子树。
GHDBIEFCA

/* 二叉树的中序遍历递归算法 */
void InOrderTraverse (BiTree T){
  if (T==NULL) {
    return;
  }
  InOrderTraverse(T->lchild); /* 中序遍历左子树 */
  printf ("%c", T->data); /* 显示结点数据,可以更改为其他对结点操作 */
  InOrderTraverse(T->rchild); /* 最后中序遍历右子树 */
}

后序遍历

规则是若二叉树为空,则空操作返回,否则从左到右先子叶后结点的方式遍历访问左右子树,最后事访问根结点。
GHDBIEFCA

/* 二叉树的后序遍历递归算法 */
void PostOrderTraverse (BiTree T){
  if (T==NULL) {
    return;
  }
  PostOrderTraverse(T->lchild); /* 先后序遍历左子树 */
  PostOrderTraverse(T->rchild); /* 再后序遍历右子树 */
  printf ("%c", T->data); /* 显示结点数据,可以更改为其他对结点操作 */
}

层序遍历

规则是若二叉树为空,则空操作返回,否则从树的第一层,也就是根结点开始访问,从上而下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。
ABCDEFGHI

推到遍历结果

已知前序遍历序列和中序遍历序列,可以唯一确定一棵二叉树。
已知后序遍历序列和中序遍历序列,可以唯一确定一棵二叉树。
已知前序遍历序列和后序遍历序列,不能确定一棵二叉树。

二叉树的建立

二叉树的建立

前序序列 AB#D##C##,用键盘挨个输入。实现的算法如下:

/* 按前序输入二叉树中结点的值(一个字符) */
/* #表示空树,构造二叉链表表示二叉树T。 */
void CreateBiTree (BiTree *T) {
  TElemType ch;
  scanf("%c", &ch);
  if (ch=='#'){
    *T=NULL;
  }else{
    *T=(BiTree)malloc(sizeof(BiTNode));
    if(!*T){
      exit(OVERFLOW);
    }
    (*T)->data=ch; /* 生成根结点 */
    CreateBiTree(&(*T)->lchild); /* 构造左子树 */
    CreateBiTree(&(*T)->rchild); /* 构造右子树 */
  }
}

线索二叉树

中序遍历时得到 HDIBJEAFCG 这样的序列,可以知道结点 I 的前驱是 D,后继是 B。
指向前驱和后继的指针称为线索,加上线索的二叉链表称为线索链表,相应的二叉树就称为线索二叉树(Threaded Binary Tree)。



转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 bin07280@qq.com

文章标题:《大话数据结构》笔记08-二叉树<下篇>

文章字数:715

本文作者:Bin

发布时间:2017-12-09, 21:34:34

最后更新:2019-08-06, 00:08:02

原始链接:http://coolview.github.io/2017/12/09/%E5%A4%A7%E8%AF%9D%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E3%80%8A%E5%A4%A7%E8%AF%9D%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E3%80%8B%E7%AC%94%E8%AE%B008-%E4%BA%8C%E5%8F%89%E6%A0%912/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录