请教,关于二叉树
C语言实现
⑴ 二叉树的建立
提示:已知一棵二叉树,共有n个结点,建立该二叉树,建立方法如下:
a.按照完全二叉树的编号方法,对该二叉树进行编号。
b.每次输入一个结点的值x和该结点的编号k,动态申请一块空间来存放该结点,空间的地址为p。
c.把p值赋给adr[k]中。
d.如果k=1,转到“f”;否则,把p的值填入其父结点的指针域中。p的父结点地址为adr[k/2],若k为偶数,则做adr[k/2]->lc=p;若k为奇数,则做adr[k/2]->rc=p。
f.重复“b”到“d”,直到全部结点数据输入完为止。
⑵ 实现前序遍历二叉树的非递归算法
提示:使用栈来实现前序遍历二叉树的基本思想是:
① 从二叉树的根结点开始,沿左支一直走到没有左孩子的结点为止。
② 在走的过程中访问所遇结点,并依次将所遇结点的非空右孩子进栈。
③ 当找到没有左孩子的结点时,如果该结点有右孩子,则从栈顶退出该结点的右孩子并访问之,然后前序遍历该结点的右子树。
④ 如果该结点无右孩子,则从栈顶退出该结点的双亲或祖先的右孩子并访问之,然后前序遍历该结点的双亲或祖先的右子树。
⑤ 按上述过程遍历所有子树,如此重复直到栈空。