题解 | #求二叉树的层序遍历#
求二叉树的层序遍历
http://www.nowcoder.com/practice/04a5560e43e24e9db4595865dc9c63a3
层序遍历
对树进行需要层序遍历,需要借助队列或者链表来完成。
class Solution {
//定义全局结果
ArrayLIst<ArrayList<Integer>> res = new ArrayList();
public ArrayLIst<ArrayList<Integer>> levelOrder (TreeNode root) {
if(root==null) return res;
//借助链表来完成层序遍历
LinkedList<TreeNode> path = new LinkedList();
level(root, path);
return res;
}
public void level (TreeNode root, LinkedList<TreeNode> path) {
//先加入第一个节点
path.addLast(root);
//遍历链表
while(!path.isEmpty()){
//获取当前层的节点数
int size = path.size();
//定义存储每层的节点
ArrayList<Integer> levelval = new ArrayList();
//遍历当前层
for(int i=0; i<size; i++){
//获取遍历节点
TreeNode tmp = path.pollLast();
//将其加入到层list里面
levelval.add(tmp.val);
//加入左右子节点
if(tmp.left!=null) path.addLast(tmp.left);
if(tmp.right!=null) path.addLast(tmp.right);
}
//将每层的结果放入到全局结果中
res.add(new ArrayList(levelval));
}
}
}
class Solution:
def levelOrder(self , root: TreeNode) -> List[List[int]]:
# write code here
if root is None:
return []
res = []
path = [root]
while(path):
arr = []
for _ in range(len(path)):
obj = path.pop(0)
arr.append(obj.val)
if obj.left:
path.append(obj.left)
if obj.right:
path.append(obj.right)
res.append(arr)
return res