二叉树中序循环,代码及详解

Posted diaolan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树中序循环,代码及详解相关的知识,希望对你有一定的参考价值。

递归算法

{
	if(bt!=NULL)
	{
                InOrder(bt->lchild);
		printf("%d",bt->data);
		InOrder(bt->rchild);
	}
}

非递归算法

Void InOrder(BTNode *bt)
{
	BTNode *p=bt;
        int top =0;
	printf("
inofder travel:
");
	While(!(p==NULL&&top==NULL))
	{
		while(p!=NULL)
		{
			push(p);
			p=p->lchild;
		}
                pop();
                printf("%d",p->data);
		p=p->rchild;
	}
}

以本图为例,演示非递归的中序遍历算法:
![](https://img2020.cnblogs.com/blog/2186505/202010/2186505-20201024125650052-1786508573.png)

1.首先,程序通过BTNode *p=bt将根节点的地址赋给p,此时p指向A;
2.p!=NUll;将A入栈;p指向A的左孩子B;
3.p!=NULL;将B入栈;p指向B的左孩子D;
4.p!=NULL;将D入栈;p指向B的左孩子,左孩子为空;
5.p=NULL;弹出D;打印D,p指向D的右孩子G;
6.p!=NULL;将G入栈;p指向G的左孩子,左孩子为空;
7.p=NULL;弹出G;打印G,p指向G的右孩子,右孩子为空;
8.p=NULL;弹出B;打印B,p指向B的右孩子E;
9.p!=NULL;将E入栈;p指向E的左孩子H;
10.p!=NULL;将H入栈;p指向E的左孩子,左孩子为空;
11.p=NULL;弹出H;打印H,p指向H的右孩子,右孩子为空;
12.p=NULL;弹出E;打印E,p指向E的右孩子,右孩子为空;
13.p=NULL;弹出A;打印A,p指向A的右孩子C;
14.p!=NUll;将C入栈;p指向C的左孩子E;
15.p!=NUll;将F入栈;p指向F的左孩子I;
16.p!=NUll;将I入栈;p指向I的左孩子,左孩子为空;
17.p=NULL;弹出I;打印I,p指向I的右孩子,右孩子为空;
18.p=NULL;弹出F;打印F,p指向F的右孩子,右孩子为空;
19.p=NULL;弹出C;打印C,p指向C的右孩子,右孩子为空;
20.p=NULL;栈中无元素,结束。
![](https://img2020.cnblogs.com/blog/2186505/202010/2186505-20201024130042625-1472219145.jpg)

以上是关于二叉树中序循环,代码及详解的主要内容,如果未能解决你的问题,请参考以下文章

剑指 の 精选详解「二叉树中序遍历的下一个结点」两种解法

编程实现以上二叉树中序遍历操作,输出遍历序列,求写代码~~

⭐算法入门⭐《二叉树 - 二叉搜索树》简单09 —— LeetCode 285. 二叉搜索树中的中序后继

二叉树中,啥是前序,中序。后序!

二叉树中某一值的路径之 先序遍历 + 二叉搜索树转化为循环双向链表 之 中序遍历

Python 二叉树的创建和遍历、重建