【路飞】算法练习——二叉树

99 阅读1分钟

226. 翻转二叉树

难度简单1112收藏分享切换为英文接收动态反馈 image.png

【代码】

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {TreeNode}
 */
var invertTree = function(root) {
    if(root === null) return null
    let left = invertTree(root.left)
    let right = invertTree(root.right)

    root.left = right
    root.right = left
    return root
};

剑指 Offer 32 - II. 从上到下打印二叉树 II

image.png 【代码】

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[][]}
 */
var levelOrder = function(root) {
    if (!root) return []
    const queue = [[root, 0]], res = []
    while (queue.length) {
        const [node, level] = queue.shift()

        // 判断当前层是否已经初始化设置 [] 若无则初始化一下
        if (!res[level]) res[level] = []
        res[level].push(node.val)

        node.left && queue.push([node.left, level + 1])
        node.right && queue.push([ node.right, level + 1 ])
    }

    return res
};

144. 二叉树的前序遍历思路

难度简单708收藏分享切换为英文接收动态反馈

image.png

【代码】

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var preorderTraversal = function(root) {
    let res = []
    preorder(root, res)
    return res
};
function preorder(root, res){
    if(root === null) return 
    res.push(root.val)
    preorder(root.left,res)
    preorder(root.right,res)
}

剑指 Offer 54. 二叉搜索树的第k大节点

image.png

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} k
 * @return {number}
 */
var kthLargest = function(root, k) {
    function dfs(node) {
        if(!node) return 0;
        const right = dfs(node.right);
        if(0 === --k){
            return node.val;
        }
        const left = dfs(node.left);
        return right+left
    }
    return dfs(root);
};

589. N 叉树的前序遍历

image.png

【代码】

/**
 * // Definition for a Node.
 * function Node(val, children) {
 *    this.val = val;
 *    this.children = children;
 * };
 */

/**
 * @param {Node|null} root
 * @return {number[]}
 */
var preorder = function(root) {
    let stack = [], res = []
    if(root === null) return res

    stack.push(root)
    while(stack.length){
        let node = stack.pop()
        res.push(node.val)
        node.children.reverse();
        stack.push(...node.children)
    }
    return res
};