- 主页/
- [名企面试知识点][Java]从上往下打印二叉树
[名企面试知识点][Java]从上往下打印二叉树
发布于 2017-03-13 10:10
2359 次浏览
0 赞
来自 笔试面试
题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
输入描述
二叉树的根节点
输出描述
从上到下,从左到右打印出整棵二叉树
题目分析
节点描述
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
解法一 运行时间:28ms 占用内存:636k
import java.util.*;
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> list =new ArrayList<Integer>();
if(root==null) return list;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
while(!queue.isEmpty()){
TreeNode t = queue.poll();
list.add(t.val);
if(t.left!=null) queue.add(t.left);
if(t.right!=null) queue.add(t.right);
}
return list;
}
}
其实就是一个宽度优先搜索,新建一个list用于顺序存放值,一个queue用来存放节点。每次出队一个节点把节点值存入list中,同时把它的左右子节点依次入队。这样形成一个从上到下从左到右的层次遍历,也就是宽度优先搜索。
解法二 运行时间:32ms 占用内存:503k
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> listVal =new ArrayList<Integer>();
if(root==null) return listVal;
ArrayList<TreeNode> listNode =new ArrayList<TreeNode>();
listNode.add(root);
for(int i=0;i<listNode.size();i++){
TreeNode t = listNode.get(i);
listVal.add(t.val);
if(t.left!=null) listNode.add(t.left);
if(t.right!=null) listNode.add(t.right);
}
return listVal;
}
}
这个和第一种解法的思路是一样的,只是队列换成链表来实现了。
添加回复