您的位置:首页 > 其它

leedcode做题总结,题目Binary Tree Level Order TraversalI/II 2012/09/28

2014-07-10 22:18 543 查看
树的层序历遍,II中反序输出用addFirst()添加即可

public static List<List<Integer>> levelOrder(TreeNode root) {
LinkedList<List<Integer>> l = new LinkedList<List<Integer>>();//里面是List不是LinkedList
LinkedList<Integer> l2 = new LinkedList<Integer>();
if(root==null)return l;

Queue<TreeNode> q = new LinkedList<TreeNode>();
q.offer(root);

int m=1;
int n=0;
do{
root = q.poll();
l2.add(root.val);
m--;

if(root.left!=null){
q.offer(root.left);
n++;
}
if(root.right!=null){
q.offer(root.right);
n++;
}
//处理放添加节点后面
if(m==0){
l.add(l2);
l2 = new LinkedList<Integer>();
m=n;
n=0;
}

}while (n!=0||m!=0);
return l;

}


public static List<List<Integer>> levelOrder2(TreeNode root) {
LinkedList<List<Integer>> l = new LinkedList<List<Integer>>();
LinkedList<Integer> l2 = new LinkedList<Integer>();
if(root==null)return l;

Queue<TreeNode> q = new LinkedList<TreeNode>();
q.offer(root);

int m=1;
int n=0;
do{
root = q.poll();
l2.add(root.val);
m--;

if(root.left!=null){
q.offer(root.left);
n++;
}
if(root.right!=null){
q.offer(root.right);
n++;
}
//处理放添加节点后面
if(m==0){
l.addLast(l2);
l2 = new LinkedList<Integer>();
m=n;
n=0;
}

}while (n!=0||m!=0);
return l;

}


Update 2015/08/18:这道题说其实和层序历遍求层数差不多,需要current和next分别记录本层和下一层的节点个数即可,下面的代码是1的

/**
* Definition of TreeNode:
* public class TreeNode {
*     public int val;
*     public TreeNode left, right;
*     public TreeNode(int val) {
*         this.val = val;
*         this.left = this.right = null;
*     }
* }
*/

public class Solution {
/**
* @param root: The root of binary tree.
* @return: Level order a list of lists of integer
*/
public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
// write your code here
ArrayList<ArrayList<Integer>> res = new ArrayList<>();
Queue<TreeNode> q = new LinkedList<>();
if (root == null)
return res;
int current = 1;
int next = 0;
ArrayList<Integer> in = new ArrayList<>();
while (root != null){
in.add(root.val);
if (root.left != null){
q.add(root.left);
next++;
}
if (root.right != null){
q.add(root.right);
next++;
}
if (q.size() != 0){
root = q.poll();
current--;
if (current == 0){
res.add(in);
in = new ArrayList<Integer>();
current = next;
next = 0;
}
} else {
res.add(in);
break;
}
}
return res;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: