数据结构(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语言版)严蔚敏->二叉树(链式存储结构)的构造及其几种遍历方式(先序中序后序层次)和线索二叉树

数据结构(C语言版)严蔚敏->二叉树(链式存储结构)的构造及其几种遍历方式(先序中序后序层次)和线索二叉树

数据结构(C语言版)严蔚敏(树二叉树的相关概念笔记)