《剑指offer》JZ59按之字形顺序打印二叉树

    技术2026-02-13  28

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

    解析:用两个栈,栈是先进后出,详细解析在代码中

    代码:

    import java.util.ArrayList;

    /* public class TreeNode {     int val = 0;     TreeNode left = null;     TreeNode right = null;     public TreeNode(int val) {         this.val = val;     }

    } */ import java.util.*;

    public class Solution {     public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {         //按照惯例首先写一个保存结果的链表         ArrayList<ArrayList<Integer>> res = new ArrayList<>();         //然后做最简单的判断         if(pRoot == null){             return res;         }         //下面才开始做题         //首先记录一下行数,奇数行从左到右,偶数行从右到左         int count = 1;         //存放奇数层         Stack<TreeNode> oddStack = new Stack<>();         oddStack.push(pRoot);         //存放偶数层         Stack<TreeNode> evenStack = new Stack<>();         while(!oddStack.isEmpty() || !evenStack.isEmpty()){             //奇数层             if(count % 2 == 1){                 ArrayList<Integer> list = new ArrayList<>();                 while(!oddStack.isEmpty()){                     TreeNode temp = oddStack.pop();                     if(temp != null){                         list.add(temp.val);                         //偶数行打印从右到左;存储需要从左到右                         evenStack.push(temp.left);                         evenStack.push(temp.right);                     }                 }                 if(list.size() != 0){                     res.add(list);                     count++;                 }             }else{                 ArrayList<Integer> list = new ArrayList<>();                 while(!evenStack.isEmpty()){                     TreeNode temp = evenStack.pop();                     if(temp != null){                         list.add(temp.val);                         //奇数行打印从左到右,存储需要从右到左                         oddStack.push(temp.right);                         oddStack.push(temp.left);                     }                 }                 if(list.size() != 0){                     res.add(list);                     count++;                 }             }         }         return res;     } }

     

    Processed: 0.009, SQL: 9