遍历二叉树
来源:互联网 发布:java array list 编辑:程序博客网 时间:2024/06/16 01:35
遍历二叉树操作
1.Binary Tree Zigzag Level Order Traversal
- 题目要求
按之字形遍历二叉树(按层遍历的一种) - 解题思路
思路一:使用递归的方法,当节点所在层为偶数,则下一层的节点按从右往左的顺序,向前插入节点;当节点所在层是奇数,向后插入。
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
- 二叉树遍历、分层遍历
- 遍历二叉树--二叉树
- 【树】遍历二叉树
- 二叉树遍历
- 二叉树遍历
- 二叉树的遍历
- (原创)遍历二叉树
- 二叉树遍历-php
- 查找--遍历二叉树
- 遍历二叉树
- 二叉树遍历规则
- 二叉树的遍历
- 二叉树遍历
- 遍历二叉树
- 二叉树遍历问题
- 二叉树遍历
- 二叉树遍历(zz)
- 二叉树的遍历
- Angularjs开发微信单页面应用时,jssdk选择图片wx.chooseImage时回显是出不来
- HeadFirst设计模式第二章(观察者模式Observer)
- spring root的开发环境搭建
- maven入门(3)
- java 泛型之不要使用原生态类型
- 遍历二叉树
- VLAN、SVLAN、PVLAN、CVLAN的区别?
- Android之dialog实现底部出现对话框
- LIRE Documentation详解
- Java8新特性 - lambda表达式
- 婚姻默想(三)
- TCP、UDP、IP 协议分析
- Html5的视频标签API-video
- 特征点匹配