【leetcode】Tree——Binary Tree Level Order Traversal(102)

来源:互联网 发布:广告图形设计软件 编辑:程序博客网 时间:2024/06/05 16:30

题目:

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).
For example:
Given binary tree [3,9,20,null,null,15,7],
    3
   / \
  9  20
      /  \
   15   7
return its level order traversal as:
[
  [3],
  [9,20],
  [15,7]
]

思路1:BFS

针对每一层就行操作的话。注意,不能直接在for里面写for(int i=0;i<queue.size();i++),因为在for内部,会向queue offer元素,导致长度改变,for循环会出问题。

while(!queue.isEmpty()){

int size = queue.size();

for(int i=0;i<size;i++){

*****

queue.offer(element);

*****

}

}

代码1:

public List<List<Integer>> levelOrder_BFS(TreeNode root) {List<List<Integer>> results = new ArrayList<List<Integer>>();if(root==null){return results;}Queue<TreeNode> q = new LinkedList<TreeNode>();q.offer(root);while(!q.isEmpty()){List<Integer> list = new ArrayList<Integer>();int size = q.size();for(int i=0;i<size;i++){TreeNode curNode = q.poll();list.add(curNode.val);if(curNode.left!=null)q.offer(curNode.left);if(curNode.right!=null)q.offer(curNode.right);}results.add(list);}    return results;}

思路2:DFS

DFS得记录当前的层数,然后在results对于层的list里面添加元素

代码2:

public List<List<Integer>> levelOrder_DFS(TreeNode root) {List<List<Integer>> results = new ArrayList<List<Integer>>();if(root==null){return results;}level(root,results,1);    return results;}private void level(TreeNode root, List<List<Integer>> results,int level){if(results.size()<level){results.add(new ArrayList<Integer>());}results.get(level-1).add(root.val);if(root.left!=null)level(root.left,results,level+1);if(root.right!=null)level(root.right,results,level+1);}


0 0
原创粉丝点击