题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。
思路:一看这个题目,记得之前上数据结构课学过,这个相当于广度搜索,bfs吧。思路就是借助一个2个队列或者数组,一种是存放每一个节点的值,另一个存放节点。然后通过遍历第二个存放节点的队列,来读取其中的值,就是要求的值了,通过怎么构造第二队列吗,那么就可以先存放根节点,然后通过访问前面的节点的左右孩子节点,来放进队列中。emmm很好理解。具体看代码
代码:java
import java.util.ArrayList;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer>arr=new ArrayList<Integer>();
ArrayList<TreeNode>q=new ArrayList<TreeNode>();
if(root==null)
return arr;
q.add(root);
while(q.size()!=0){
TreeNode temp=q.remove(0);
if(temp.left!=null)
q.add(temp.left);
if(temp.right!=null)
q.add(temp.right);
arr.add(temp.val);
}
return arr;
}
}
js:
/* function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
} */
function PrintFromTopToBottom(root)
{
var arr=[];
var q=[];
if(root==null)
return arr;//这里不写返回为null,要写false或者arr。
q.push(root);
var i=0;
while(q.length>i){
var temp=q[i++];//或者可以用shift函数,删除并返回数组的第一个元素,这样不用设置i了。
if(temp.left!=null)
q.push(temp.left);
if(temp.right!=null)
q.push(temp.right);
arr.push(temp.val);
}
return arr;
// write code here
}