Skip to content

Latest commit

 

History

History
112 lines (96 loc) · 2.18 KB

107.二叉树的层序遍历2.md

File metadata and controls

112 lines (96 loc) · 2.18 KB

107. 二叉树的层序遍历 II

url

题目

给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

给定二叉树 [3,9,20,null,null,15,7],
    3
   / \
  9  20
    /  \
   15   7
返回其自底向上的层序遍历为:
[
  [15,7],
  [9,20],
  [3]
]

方法

队列即可

code

js

var levelOrderBottom = function(root) {
    // 队列
    var ret = [];
    var queue = [root];
    while (queue.length !== 0) {
        var list = [];
        var cnt = queue.length;
        while (cnt-- > 0) {
            var node = queue[0];
            queue = queue.slice(1, queue.length);
            if (node === null) 
                continue;
            list.push(node.val);
            queue.push(node.left);
            queue.push(node.right);
        }
        if (list.length !== 0) {
            console.log(list);
            ret.push(list);
        }
    }
    return ret.reverse();
};

go

func levelOrder(root *TreeNode) [][]int {
    var res [][]int
	q := []*TreeNode{root}
	for len(q) != 0 {
		var list []int
		cnt := len(q)
		for cnt > 0 {
            cnt--
			node := q[0]
            q = q[1:]
			if node == nil {
				continue
			}
			list = append(list, node.Val)
			q = append(q, node.Left)
			q = append(q, node.Right)
		}
		if len(list) != 0 {
			res = append(res, list)
		}
	}
	return res
}

java

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> ret = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while (!queue.isEmpty()) {
            List<Integer> list = new ArrayList<>();
            int cnt = queue.size();
            while (cnt-- > 0) {
                TreeNode node = queue.poll();
                if (node == null) continue;
                list.add(node.val);
                queue.add(node.left);
                queue.add(node.right);
            }
            if (list.size() != 0) ret.add(list);
        }
        return ret;
    }
}