当前位置:   article > 正文

按之字形顺序打印二叉树(树遍历,stack,queue结合使用)_c#按之字形顺序打印二叉树

c#按之字形顺序打印二叉树

按之字形顺序打印二叉树_牛客题霸_牛客网

1."之""字行说明每一层的顺序是不一样的,第一层是从左到右,第二层就是从右到左

2.实际上每一层的顺序不一样,但是还是按照层序遍历的方式来遍历层的

3.层序遍历一般用到队列 ,但是这个顺序有时候是逆序,我们联想到的数据结构就是栈

4.整体思路:

  • 首先你要有栈和队列,栈为主,队列为辅
  • 你定义dir = 1 或者2 是为了去分辨这一层是左遍历还是右遍历
  • 你把根节点入到栈去,然后记录栈中的元素个数,for循环就是先去出栈,然后得到栈顶元素val,此时再把这个出栈的左右子树入到队列中去,直到这个栈出完
  • 你出栈的顺序实际上是你入栈的逆序,你这一层出栈是 dir = 1,从左到右,那么你把这个顺序衍生到下一层的入栈顺序,那么你下一层出栈顺序就是逆序了
  • 这里通过队列作为中间商,先入到队列中去(因为出入队列的顺序是一致的),然后把队列中的元素(就是上一层的元素)全部入到栈中去,接下来通过while循环,不断就遍历下一层
  • 别忘了每走完一层  dir 都需要改变一下
  1. import java.util.*;
  2. /*
  3. public class TreeNode {
  4. int val = 0;
  5. TreeNode left = null;
  6. TreeNode right = null;
  7. public TreeNode(int val) {
  8. this.val = val;
  9. }
  10. }
  11. */
  12. public class Solution {
  13. public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
  14. ArrayList<Integer> list = new ArrayList<>();
  15. ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
  16. if(pRoot == null){
  17. return result;
  18. }
  19. Stack<TreeNode> stack = new Stack<>();
  20. Queue<TreeNode> q = new LinkedList<>();
  21. stack.push(pRoot);
  22. int dir = 1;
  23. while(!stack.isEmpty()){
  24. int size = stack.size();
  25. for(int i = 0;i < size;i++){
  26. //先去把stack 中的元素全部出栈
  27. TreeNode node = stack.pop();
  28. list.add(node.val);
  29. TreeNode first = (dir == 1) ? node.left : node.right;
  30. TreeNode second = (dir == 1)? node.right: node.left;
  31. if(first != null) q.offer(first);
  32. if(second != null) q.offer(second);
  33. //这里执行一次循环实际上是将一个节点val放到list中,然后这个节点的左右子树
  34. //根据dir的值进行顺序入队列
  35. }
  36. //一个for循环结束意味着这一层的出栈下一层的入队列都结束了
  37. result.add(new ArrayList(list));
  38. list.clear();
  39. //此时我们就去把存储在队列中的这一层入到栈中
  40. while(!q.isEmpty()){
  41. stack.push(q.poll());
  42. }
  43. dir = (dir == 1) ? 2 : 1;
  44. }
  45. return result;
  46. }
  47. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/837145
推荐阅读
相关标签
  

闽ICP备14008679号