二叉树的非递归遍历二(中序/JAVA)

思路


与先序非递归遍历非常类似,沿左子树向下搜索,将结点圧入栈中直到结点为空即到达最左端,出栈获得结点并访问,再沿右子树继续。可以看到与先序唯一的不同,先序是在压入栈之前访问,而中序则是在出栈之后访问。同样当栈为空时遍历完成。

代码


这里不贴完整代码了,其余与先序代码完全一致。关键函数代码如下:

    //非递归中序遍历
    public static void NotReCuInOrder(BiTree T) {
            //栈初始化
            Stack S = new Stack();
            S.top = -1;
            S.nodes = new BiTree[100];
            BiTree p = T;
            //遍历
            while(p != null || S.top != -1) {
                if(p != null) {
                    S.nodes[++S.top] = p;//入栈
                    p = p.lchild;//沿左子树向下
                } else {
                    p = S.nodes[S.top--];//出栈
                    System.out.print(p.data+" ");//访问
                    p = p.rchild;//沿右子树
                }
            }
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容