ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

非递归遍历二叉树Java

2022-06-28 01:01:23  阅读:150  来源: 互联网

标签:遍历 TreeNode res stk right 二叉树 new Java null



import java.util.*;

public class Test {

    static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        public TreeNode(int val) {
            this.val = val;
        }
    }


    public static void main(String[] args) {
        TreeNode treeNode1 = new TreeNode(1);
        TreeNode treeNode2 = new TreeNode(2);
        TreeNode treeNode3 = new TreeNode(3);
        TreeNode treeNode4 = new TreeNode(4);
        TreeNode treeNode5 = new TreeNode(5);
        TreeNode treeNode6 = new TreeNode(6);
        TreeNode treeNode7 = new TreeNode(7);
        treeNode1.left = treeNode2;
        treeNode1.right = treeNode3;
        treeNode2.left = treeNode4;
        treeNode2.right = treeNode5;
        treeNode3.left = treeNode6;
        treeNode3.right = treeNode7;
        List<Integer> f = in(treeNode1);
        System.out.println(f);
        System.out.println(pre(treeNode1));
        System.out.println(post(treeNode1));
    }

    /**
     * 中序遍历 非递归
     */
    public static List<Integer> in(TreeNode root) {
        List<Integer> res = new ArrayList<Integer>();
        Stack<TreeNode> stk = new Stack<TreeNode>();
        TreeNode p = root;
        while (p != null || !stk.isEmpty()) {
            while (p != null) {
                stk.push(p);
                p = p.left;
            }
            p = stk.pop();
            res.add(p.val);
            p = p.right;
        }
        return res;
    }

    /**
     * 非递归先序
     */
    public static List<Integer> pre(TreeNode root) {
        List<Integer> res = new ArrayList<Integer>();
        Stack<TreeNode> stk = new Stack<TreeNode>();
        stk.push(root);
        TreeNode p = root;
        while (!stk.isEmpty()) {
            p = stk.pop();
            res.add(p.val);
            if (p.right != null) {
                stk.push(p.right);
            }
            if (p.left != null) {
                stk.push(p.left);
            }

        }
        return res;
    }

    /**
     * 非递归后续遍历
     */
    public static List<Integer> post(TreeNode root) {
        List<Integer> res = new ArrayList<Integer>();
        Stack<TreeNode> stk = new Stack<TreeNode>();
        TreeNode p = root;
        TreeNode prev = null;
        while (p != null || !stk.isEmpty()) {
            while (p != null) {
                stk.push(p);
                p = p.left;
            }
            p = stk.pop();
            if (p.right == null || p.right == prev) {
                res.add(p.val);
                prev = p;
                p = null;
            } else {
                stk.push(p);
                p = p.right;
            }

        }
        return res;
    }

}

标签:遍历,TreeNode,res,stk,right,二叉树,new,Java,null
来源: https://www.cnblogs.com/paidaxing7090/p/16418095.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有