非递归中序遍历二叉树(图解)

本文参考:http://www.slyar.com/blog/bitree-unrecursion-c.html

为了加深记忆,将代码中的每一步操作弄成了PPT。图解如下,如有不当之处,还请指正。谢谢。

中序遍历:先访问左子树,再访问根节点,最后访问右子树。

设置一个栈,出栈即为访问节点。先将根节点的左节点全部进栈,然后出栈一个节点,访问。

将该节点的右孩子节点进栈,再将右孩子节点的所有左节点全部进栈...如此这般直到栈空为止。

代码如下:

void InOrderTraverse(BiTree T, Status (* visit)(ElemType e))
{
	BiTree pStack[100];
	BiTree p;
	int top = -1;

	if(T != NULL)
	{
		p = T;
		while(top > -1 || p != NULL)
		{
			while(p != NULL)
			{
				pStack[++top] = p;
				p = p->lchild;
			}

			if(top > -1)
			{
				p = pStack[top--];
				visit(p->data);
				p = p->rchild;
			}
		}
	}
}

运行步骤如下:

1.

非递归中序遍历二叉树(图解)_第1张图片


2.

非递归中序遍历二叉树(图解)_第2张图片


3.

非递归中序遍历二叉树(图解)_第3张图片


4.

非递归中序遍历二叉树(图解)_第4张图片


5.

非递归中序遍历二叉树(图解)_第5张图片


6.

非递归中序遍历二叉树(图解)_第6张图片


7.

非递归中序遍历二叉树(图解)_第7张图片


8.

非递归中序遍历二叉树(图解)_第8张图片


9.

非递归中序遍历二叉树(图解)_第9张图片


10.

非递归中序遍历二叉树(图解)_第10张图片


11.

非递归中序遍历二叉树(图解)_第11张图片


12.

非递归中序遍历二叉树(图解)_第12张图片


13.

非递归中序遍历二叉树(图解)_第13张图片


14.

非递归中序遍历二叉树(图解)_第14张图片


15.

非递归中序遍历二叉树(图解)_第15张图片


16.

非递归中序遍历二叉树(图解)_第16张图片


17.

非递归中序遍历二叉树(图解)_第17张图片


19.

非递归中序遍历二叉树(图解)_第18张图片


20.

非递归中序遍历二叉树(图解)_第19张图片


21.

非递归中序遍历二叉树(图解)_第20张图片


22.

非递归中序遍历二叉树(图解)_第21张图片


23.

非递归中序遍历二叉树(图解)_第22张图片


24.

非递归中序遍历二叉树(图解)_第23张图片


25.

非递归中序遍历二叉树(图解)_第24张图片


26.

非递归中序遍历二叉树(图解)_第25张图片


27.

非递归中序遍历二叉树(图解)_第26张图片


28.

非递归中序遍历二叉树(图解)_第27张图片


29.

非递归中序遍历二叉树(图解)_第28张图片


30.

非递归中序遍历二叉树(图解)_第29张图片


31.

非递归中序遍历二叉树(图解)_第30张图片


32.

非递归中序遍历二叉树(图解)_第31张图片





你可能感兴趣的:(非递归中序遍历二叉树(图解))