• 按之字形顺序打印二叉树



    请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推


    解题思路

    这道题可以借助两个栈来实现,用文字不好描述,也许直接看代码会好一些

    import java.util.ArrayList;
    import java.util.Stack;
    public class Solution {
        public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
        	// 用来存放结点
            ArrayList<ArrayList<Integer>> list = new ArrayList<>();
            if(pRoot == null) {
                return list; 
            }
            // 判断奇偶层
            int layer = 1;
            // 存放奇数层结点
            Stack<TreeNode> s1 = new Stack<>();
            // 存放偶数层结点
            Stack<TreeNode> s2 = new Stack<>();
            // 先把根结点放入奇数层
            s1.push(pRoot);
            // 如果两个栈都为空,那么就证明所有结点都已遍历完毕
            while(!s1.empty() || !s2.empty()) {
            	// 当前层是奇数层
                if(layer % 2 != 0) {
                	// 存放奇数层的结点
                    ArrayList<Integer> temp = new ArrayList<>();
                    // 把奇数层的结点逐个弹出,用 temp 保存起来
                    // 同时把每个弹出结点的左右子结点压入栈
                    // 要注意栈的特点是后进先出,因此出栈顺序和入栈顺序是相反的
                    while(!s1.empty()) {
                        TreeNode node = s1.pop();
                        if(node != null) {
                            temp.add(node.val);
                            s2.push(node.left);
                            s2.push(node.right);
                        }
                    }
                    if(!temp.isEmpty()) {
                        list.add(temp);
                        layer++;
                    }
                } else {
                	// 原理同上
                    ArrayList<Integer> temp = new ArrayList<>();
                    while(!s2.empty()) {
                        TreeNode node = s2.pop();
                        if(node != null) {
                            temp.add(node.val);
                            s1.push(node.right);
                            s1.push(node.left);
                        }
                    }
                    if(!temp.isEmpty()) {
                        list.add(temp);
                        layer++;
                    }
                }
            }
            return list;
        }
    }
    

  • 相关阅读:
    13 | 效率为王:脚本与数据的解耦 + Page Object模型
    关于编程与生活
    我的python学习笔记
    Tarjan学习笔记
    web----https请求过程
    JVM----堆内存设置原理
    算法----快速排序
    SpringCloud----spring security Oauth2认证解决方案
    Mysql----insert/update/delete
    课外知识----单点登录
  • 原文地址:https://www.cnblogs.com/Yee-Q/p/14163520.html
Copyright © 2020-2023  润新知