我是靠谱客的博主 儒雅大神,最近开发中收集的这篇文章主要介绍二叉树的前、中、后序遍历统一写法参考算法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

参考

  1. 帮你对二叉树不再迷茫,彻底吃透前中后序递归法(递归三部曲)和迭代法(不统一写法与统一写法)
  2. 二叉树的前、中、后序遍历(递归与非递归)

算法

通过插入标志符,来标记需要输出哪个元素。

  1. 确定输出顺序。首次遍历结点A时,将A和其左右子结点按照遍历顺序插入到栈中,A结点后需要插入标志符。
  2. 输出结点元素。如果当前栈顶元素是标志符,说明A结点该输出了,输出A结点即可。

参考博文1中,用null作为标志符,这在要求输出空结点时不可行,标志符和空结点会发生冲突。要解决冲突,只需自定义标识符即可,详见下述代码。如果空结点需要区分左空结点和右空结点,可以再自定义两个标识符来处理。

前序遍历

public void preOrderTraverse3(ListNode<String> root) {
        System.out.println("前根遍历-非递归");
        Stack<ListNode<String>> stack = new Stack<>();
        stack.push(root);
        ListNode<String> cur;
        ListNode<String> flag = new ListNode<>("0");//标识符
        while (!stack.isEmpty()) {
            cur = stack.pop();
            if (cur == null) {
                System.out.printf("^");
            } else if (cur == flag) {
                cur = stack.pop();
                System.out.printf(cur.val);
            } else {
                stack.push(cur.right);//右
                stack.push(cur.left);//左
                stack.push(cur);//中
                stack.push(flag);
            }

        }

        System.out.printf("n");

    }

中序遍历

public void inOrderTraverse3(ListNode<String> root) {
        System.out.println("中根遍历-非递归");
        Stack<ListNode<String>> stack = new Stack<>();
        stack.push(root);
        ListNode<String> cur;
        ListNode<String> flag = new ListNode<>("0");//标识符
        while (!stack.isEmpty()) {
            cur = stack.pop();
            if (cur == null) {
                System.out.printf("^");
            } else if (cur == flag) {
                cur = stack.pop();
                System.out.printf(cur.val);
            } else {
                stack.push(cur.right);//右
                stack.push(cur);//中
                stack.push(flag);
                stack.push(cur.left);//左
            }

        }

        System.out.printf("n");

    }

后序遍历

public void postOrderTraverse3(ListNode<String> root) {
        System.out.println("后根遍历-非递归");
        Stack<ListNode<String>> stack = new Stack<>();
        stack.push(root);
        ListNode<String> cur;
        ListNode<String> flag = new ListNode<>("0");//标识符
        while (!stack.isEmpty()) {
            cur = stack.pop();
            if (cur == null) {
                System.out.printf("^");
            } else if (cur == flag) {
                cur = stack.pop();
                System.out.printf(cur.val);
            } else {
                stack.push(cur);//中
                stack.push(flag);
                stack.push(cur.right);//右
                stack.push(cur.left);//左
            }

        }

        System.out.printf("n");

    }

最后

以上就是儒雅大神为你收集整理的二叉树的前、中、后序遍历统一写法参考算法的全部内容,希望文章能够帮你解决二叉树的前、中、后序遍历统一写法参考算法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部