(二叉树的层次遍历)LeetCode#102. Binary Tree Level Order Traversal

来源:互联网 发布:国内熟女网络视频 编辑:程序博客网 时间:2024/06/05 17:25
  • 题目:二叉树的层次遍历,每一层遍历的结果存为一个list,最终返回结果形式为[[],[],[]]
  • 难度:Medium
  • 思路:层次遍历的节点访问顺序是:根节点,再依照先左结点后右节点,将节点按照顺序存入队列,然后访问队列的结点
  • 代码:
    队列实现
public class Solution {    public List<List<Integer>> levelOrder(TreeNode root) {        List<List<Integer>> result = new ArrayList<List<Integer>>();        if(root == null){            return result;        }        LinkedList<TreeNode> queue = new LinkedList<>();        queue.offer(root);        while(!queue.isEmpty()){            int size = queue.size();            List<Integer> tmp = new ArrayList<>();            for(int i = 0; i < size; i++){                TreeNode node = queue.poll();                tmp.add(node.val);                if(node.left != null){                    queue.offer(node.left);                }                 if(node.right != null){                    queue.offer(node.right);                }            }            result.add(tmp);        }        return result;    }}

层次遍历的递归实现,一开始我用一个ArrayList来存待访问的节点,我的代码报 stackOverFlowError;后来看了Discuss里的C++递归实现,发现可以通过传入一个当前访问的是第几层dep来避免使用很多空间

public class Solution {    public List<List<Integer>> levelOrder(TreeNode root) {        List<List<Integer>> result = new ArrayList<List<Integer>>();        if(root == null){            return result;        }        recursion(root, result, 0);        return result;    }    public void recursion(TreeNode node, List<List<Integer>> list, int dep){        if(node == null){            return;        }        if(dep == list.size()){            list.add(new ArrayList<>());        }        list.get(dep).add(node.val);        recursion(node.left, list, dep+1);        recursion(node.right, list, dep+1);    }}
阅读全文
0 0
原创粉丝点击