非递归方式访问二叉树,前序和中序的顺序一致,都是先访问完左子树,所以先是一个while循环,顺着左子树走完之后,再去访问根结点和右子树。还有一点是比较重要的,因为二叉树最多有两个子结点,所以在访问结点的右子结点之前,应该将根结点在栈中移除,要不然会陷入死循环。或者另一种方式就是记录访问完的结点。
遍历二叉树有四种方式:前序遍历、中序遍历、后序遍历和层次遍历。
非递归方式前序遍历二叉树:

非递归中序遍历二叉树:应用1:二叉搜索树的最小第K个数,二叉搜索输的中序遍历是有序的。

后序遍历:最复杂

层次遍历:

详细源代码在https://github.com/whynotybb/alg_practice/tree/master/src/binarytree
网友评论