数据结构(C语言版)严蔚敏---二叉树遍历操作二叉树的相关代码
Posted il_持之以恒_li
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构(C语言版)严蔚敏---二叉树遍历操作二叉树的相关代码相关的知识,希望对你有一定的参考价值。
1. 二叉树的自下而上、从左到右的层次遍历算法
void LevelTraverse2(BiTree T)
BiTree Queue[100],Stack[100];
// 这里用数组代替队列和栈
int i=0,i1=0,j=0;
Queue[0] = T;
while(i1<=i)
T = Queue[i1++];
Stack[j++] = T;
if(T->left)
Queue[++i] = T->left;
if(T->right)
Queue[++i] = T->right;
while(j>0)
T = Stack[--j];
printf("%c",T->data);
printf("\\n");
【注意】代码中使用数组代替队列和栈。
运行结果如下:
所表示的二叉树为:
使用队列和栈的参考代码为:
void LevelTraverse2(BiTree T)
Queue Q;
Stack S;
BiTree p;
// 定义队列和栈
//初始化队列和栈
if(T)
// 二叉树非空时
InitQueue(Q);
InitStack(S);
EnQueue(Q,T);
// 入队
while(!IsQueueEmpty(Q))
DeQueue(Q,p);
// 出队
Push(S,p);
// 入栈
if(p->lchild)
EnQueue(Q,p->lchild);
// 左孩子非空
if(p->rchild)
EnQueue(Q,p->rchild);
while(!IsStackEmpty(S))
Pop(S,p);
// 出栈
printf("%c",p->data);
思路为:利用原有的层次遍历算法(从上至下、从左至右),出队的同时将各节点入栈,在所有节点入栈后再从栈顶依次访问即可。
2.非递归算法求二叉树的高度
int BitDepth(BiTree T)
if(!T)
return 0;
// 如果二叉树为空
int f = 0,r = 0;
int level = 0,last = 1;
BiTree Queue[100];
Queue[r++] = T;
BiTree p;
while(f<r)
p = Queue[f++];
if(p->left)
Queue[r++] = p->left;
if(p->right)
Queue[r++] = p->right;
if(last == f)
level++;
last = r;
return level;
运行结果(所用的二叉树和上述一样):
思路:采用层次遍历算法,设置变量level记录当前节点所在的层次,设置变量last指向当前层的最右节点,每次层次遍历出队时与last指针比较,若两者相同,则层数加1,并让last指向下一层的最右节点,直到遍历完成。
以上是关于数据结构(C语言版)严蔚敏---二叉树遍历操作二叉树的相关代码的主要内容,如果未能解决你的问题,请参考以下文章
数据结构(C语言版)严蔚敏->二叉树(链式存储结构)的构造及其几种遍历方式(先序中序后序层次)和线索二叉树
数据结构(C语言版)严蔚敏->二叉树(链式存储结构)的构造及其几种遍历方式(先序中序后序层次)和线索二叉树
数据结构(C语言版)严蔚敏->二叉树(链式存储结构)的构造及其几种遍历方式(先序中序后序层次)和线索二叉树
数据结构(C语言版)严蔚敏->二叉树(链式存储结构)的构造及其几种遍历方式(先序中序后序层次)和线索二叉树