LeetCola_102_107_二叉树的层次遍历_0731S {

107 给定一个二叉树,返回其节点值自底向上的层次遍历。

 

 

  • 建立以 <List<Integer>>为元素的List 用于存 result
  • public List<List<Integer>> levelOrderBottom(TreeNode root) {
    • 调用helper(root,0)
    • 返回 result
  • private void helper(TreeNode root, int level) {
    • 如果根为空 返回空
    • 如果result的size小于level+1
    •  
    • 中间
public List<List<Integer>> levelOrder(TreeNode root) {
	if(root == null) return new ArrayList<List<Integer>>();
	List<List<Integer>> res = new ArrayList<List<Integer>>();
	LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
	//将根节点放入队列中,然后不断遍历队列
	queue.add(root);
	while(queue.size() > 0) {
		//获取当前队列的长度,这个长度相当于 当前这一层的节点个数
		int size = queue.size();
		ArrayList<Integer> tmp = new ArrayList<Integer>();
	        //将队列中的元素都拿出来(也就是获取这一层的节点),放到临时list中
		//如果节点的左/右子树不为空,也放入队列中
		for(int i = 0; i < size; ++i) {
			TreeNode t = queue.remove();
			tmp.add(t.val);
			if(t.left != null) queue.add(t.left);
			if(t.right != null) queue.add(t.right);
		}//将临时list加入最终返回结果中
		res.add(tmp);
	}
	return res;
}
List<List<Integer>> result = new ArrayList<>();

public List<List<Integer>> levelOrderBottom(TreeNode root) {
	helper(root, 0);
	return result;
}

private void helper(TreeNode root, int level) {
	if(root == null) return;
	if(result.size() < level + 1) {
	    result.add(0, new ArrayList<>());
	}
	int bucket = result.size() - level - 1;
	result.get(bucket).add(root.val);
	helper(root.left, level + 1);
	helper(root.right, level + 1);
}

先来看递归法

102

  • 直接调用helper方法 传入参数 root list level
  • helper方法 返回值为list套list
    • 如果list是空的 就建一个新的list
    • 如果root为空 就返回list
    • 如果list的size 等于level
      • 就新加一层list
    • 给list的第level层加root的val
    • 调用helper root的left list 层+1
    • 调用helper root的right list 层+1
    •  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值