遍历二叉树

来源:互联网 发布:java array list 编辑:程序博客网 时间:2024/06/16 01:35

遍历二叉树操作

1.Binary Tree Zigzag Level Order Traversal

  1. 题目要求
    按之字形遍历二叉树(按层遍历的一种)
  2. 解题思路
    思路一:使用递归的方法,当节点所在层为偶数,则下一层的节点按从右往左的顺序,向前插入节点;当节点所在层是奇数,向后插入。
List<List<Integer>> list = new ArrayList<>();    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {        if(root == null)            return list;        travel(root, 0);                return list;    }    public void travel(TreeNode root, int level){        if(root == null)            return;        if(list.size() <= level){            List<Integer> var = new ArrayList<>();            list.add(var);        }        if(level%2 == 0){            list.get(level).add(root.val);        }else{            list.get(level).add(0,root.val);        }        travel(root.left, level + 1);        travel(root.right, level + 1);    }

思路二:使用两个栈,遍历一层时,将下一层的节点放到下一个栈中。交替访问两个栈。

List<List<Integer>> list = new ArrayList<>();    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {        if(root == null)                return list;            Stack<TreeNode> stack1= new Stack<>();            Stack<TreeNode>stack2= new Stack<>();            stack1.add(root);            while(!stack1.isEmpty() || !stack2.isEmpty()){                List<Integer> var = new ArrayList<>();                if(!stack1.isEmpty() && stack2.isEmpty()){                    while(!stack1.isEmpty()){                        TreeNode node = stack1.peek();                        var.add(node.val);                        if(node.left != null)                            stack2.add(node.left);                        if(node.right != null)                            stack2.add(node.right);                        stack1.pop();                    }                }else if(stack1.isEmpty() && !stack2.isEmpty()){                    while(!stack2.isEmpty()){                        TreeNode node = stack2.peek();                        var.add(node.val);                        if(node.right != null)                            stack1.add(node.right);                        if(node.left != null)                            stack1.add(node.left);                        stack2.pop();                    }                      }                list.add(var);            }            return list;    }
0 0
原创粉丝点击