functioninorder(root) { if (!root) return const task = [] let p = root while (task.length || p) { while (p) { task.push(p) p = p.left } const n = task.pop() console.log(n.key); p = n.right } }
/** * @param {TreeNode} root * @return {number} */ var maxDepth = function (root) { let res = 0 /** * * @param {*} n 树 * @param {*} l 层级 */ constdfs = (n, l) => { if (!n) return if (!n.left && !n.right) { res = Math.max(res, l) } dfs(n.left, l + 1) dfs(n.right, l + 1) } dfs(root, 1) return res };
题目 二叉树的最小深度
时间复杂度:O(n)
空间复杂度:O(n)
思路:广度遍历,同时记录当前层级,当遇到没有叶子节点,则说明找到最小深度,最后返回
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/** * @param {TreeNode} root * @return {number} */ var minDepth = function (root) { if (!root) return0; let task = [ [root, 1] ] while (task.length) { let [n, l] = task.shift() if (!n.left && !n.right) { return l } if (n.right) task.push([n.right, l + 1]) if (n.left) task.push([n.left, l + 1])
/** * @param {TreeNode} root * @return {number[][]} */ var levelOrder = function (root) { if (!root) return [] const q = [root] const res = [] while (q.length) { let len = q.length res.push([]) // 每次while之前都把上一层的全部提出,下一层的全部记录下来 while (len--) { const n = q.shift() res[res.length - 1].push(n.val) if (n.left) q.push(n.left) if (n.right) q.push(n.right) } } return res };