前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JS数据结构第六篇 --- 二叉树力扣练习题

JS数据结构第六篇 --- 二叉树力扣练习题

作者头像
tandaxia
发布于 2019-09-09 08:15:04
发布于 2019-09-09 08:15:04
86900
代码可运行
举报
文章被收录于专栏:谈补锅谈补锅
运行总次数:0
代码可运行

1、第226题:翻转二叉树

递归+迭代两种实现方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/** 反转二叉树
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {TreeNode}
 * 第一种方式迭代
 * 执行用时 :72 ms, 在所有 JavaScript 提交中击败了87.29%的用户
 * 内存消耗 :33.8 M, 在所有 JavaScript 提交中击败了24.26%的用户
 */
var invertTree = function(root) {
    if (!root) return root;

    var arr = [root];

    while(arr.length){
        var current = arr.shift(); //取出节点,交换左右子节点
        var temp = current.right;
        current.right = current.left;
        current.left = temp;

        //将左右子节点push到数组中
        if (current.right) arr.push(current.right);
        if (current.left) arr.push(current.left);
    }
    return root;
};


/**
 * 第二种方式递归
 * @param root
 * @returns {*}
 * 执行用时 :64 ms, 在所有 JavaScript 提交中击败了98.02%的用户
 * 内存消耗 :33.6 MB, 在所有 JavaScript 提交中击败了53.85%的用户
 */
var invertTree2 = function(root) {
    if (!root) return root;

    var temp = invertTree(root.left);
    root.left = invertTree(root.right);
    root.right = temp;
    return root;
};

2、第144题:二叉树的前序遍历

初看这个题目描述,没怎么看懂,特别是控制台的输入输出

比如输入:[3, 9, 20, 15, 7, 88, 16,  2, 19, 13, 26, 11]

输出是:[3,9,15,2,19,7,13,26,20,88,11,16]

一时没弄明白,后面琢磨了一下,才发现力扣这里的输入是按照输入顺序来组成树的,而不是按输入的大小组成树。

即上面这个输入的数字列表,做成二叉树图为:

如果输入的数字列表中带有null, 则null所在的子树空不占位,

比如输入:[3, 9,  null, 20, 15, 7,  88,  16,  2, 19,  null, 13, 26, 11]

输出为:[3, 9, 20, 7, 19, 88, 13, 26, 15, 16, 11, 2]

输入数字的二叉树图为:

理解了力扣题目的输入输出逻辑,咱们再做题,二叉树的前序遍历递归+迭代方式code (先根节点,再左子节点,再右子节点):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**  前序遍历规则:先根节点,再左子节点,再右子节点
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/** 第一种方式:递归
 * @param {TreeNode} root
 * @return {number[]}
 执行用时 :72 ms, 在所有 JavaScript 提交中击败了86.38%的用户
 内存消耗 :33.8 MB, 在所有 JavaScript 提交中击败了17.62%的用户
 */
var preorderTraversal = function(root) {
    var arr = [];
    recusion(root, arr);
    return arr;

    function recusion(root){
        if (!root) return;
        //前序遍历,先根节点,再左节点,再右节点
        arr.push(root.val);
        recusion(root.left, arr);
        recusion(root.right, arr);
    }
};

// function TreeNode(val) {
//     this.val = val;
//     this.left = this.right = null;
// }


/**
 * 第二种方式:迭代
 * 执行用时 :76 ms, 在所有 JavaScript 提交中击败70.96%的用户
 * 内存消耗 :33.6 MB, 在所有 JavaScript 提交中击败了60.62%的用户
 */
var preorderForeach = function(root) {
    var res = [];
    if (!root) return res;
    var arr = [root];
    while(arr.length){
        //借助于栈的特性:后进先出
        var current = arr.pop();
        res.push(current.val);

        //先将右节点压入栈底,因为右节点后取值
        if (current.right){
            arr.push(current.right);
        }
        //左节点先取值,压入栈顶
        if (current.left){
            arr.push(current.left);
        }
    }
    return res;
};

3、第94题:二叉树的中序遍历

二叉树中序遍历,先找到最左边的左子节点,从这里开始,然后左子节点, 再根节点,再右子节点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/** 中序遍历:从小到大,从做左边的左子节点,最后一个是右边的右子节点
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/** 中序遍历:按照从小到大排序,先找到最左边的子节点,也就是最小值,再依次往上走父节点,右节点
 * @param {TreeNode} root
 * @return {number[]}
 * 第一种方式:递归
 * 执行用时 :64 ms, 在所有 JavaScript 提交中击败了97.67%的用户
 * 内存消耗 :33.8 MB, 在所有 JavaScript 提交中击败20.52%的用户
 */
var inorderTraversal = function(root) {
    const res = [];
    if (!root) return res;
    recusion(root);
    return res;

    function recusion(root){
        if (!root) return;

        recusion(root.left);
        res.push(root.val);
        recusion(root.right);
    }
};


/**
 * 第二种方式:迭代
 * 执行用时 :68 ms, 在所有 JavaScript 提交中击败了94.67%的用户
 * 内存消耗 33.7 MB, 在所有 JavaScript 提交中击败了30.60%的用户
 */
var inorderTraversal2 = function(root) {
    const res = [];
    if (!root) return res;

    const arr = [];
    while (root || arr.length){
        while(root){
            arr.push(root);
            root = root.left;
        }
        root = arr.pop();  //最后一个左节点
        res.push(root.val);
        root = root.right;
    }
    return res;
};

4、第145题:二叉树的后序遍历

后序遍历的规则:先叶子节点,再根节点;即先左子节点,再右子节点,再根节点。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/** 后序遍历规则:先叶子节点,叶子节点先左后右,再根节点
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/** 后序遍历:先叶子节点,再左子树,再右子树
 * 第一种方式:递归
 * @param {TreeNode} root
 * @return {number[]}
 * 执行用时 :76 ms, 在所有 JavaScript 提交中击败了68.85%的用户
 * 内存消耗 :33.9 MB, 在所有 JavaScript 提交中击败了9.84%的用户
 */
var postorderTraversal = function(root) {
    var res = [];
    if (!root) return res;
    recusion(root);
    return res;

    function recusion(root){
        if (!root) return;

        recusion(root.left);
        recusion(root.right);
        res.push(root.val);
    }
};


/**
 * 第二种方式:迭代
 * @param root
 * @returns {Array}
 * 执行用时 :80 ms, 在所有 JavaScript 提交中击败了48.15%的用户
 * 内存消耗 :33.7 MB, 在所有 JavaScript 提交中击败25.41%的用户
 */
var postorderTraversal = function(root) {
    var res = [];
    if (!root) return res;

    var arr = [root];
    while (arr.length){
        var current = arr.pop();
        res.unshift(current.val);

        if (current.left){
            arr.push(current.left);
        }
        if (current.right){
            arr.push(current.right);
        }
    }
    return res;
};

5、第102题:二叉树的层级遍历

递归层级遍历和前序遍历差不多,迭代方式层级遍历有点绕

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/** 层次遍历
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 * 给定二叉树: [3,9,20,null,null,15,7],
    3
  / \
 9  20
   /  \
 15   7
 返回其层次遍历结果:
 [
 [3],
 [9,20],
 [15,7]
 ]

 */
/** 层次遍历,第一种方式:递归, 和前序遍历差不多
 * @param {TreeNode} root
 * @return {number[][]}
 * 执行用时 :84 ms, 在所有 JavaScript 提交中击败了55.19%的用户
 * 内存消耗 :34.6 M, 在所有 JavaScript 提交中击败了53.23%的用户
 */
var levelOrder = function(root) {
    var res = [];
    if (!root) return res;
    recusion(root, 0);
    return res;

    function recusion(root, level){

        if (!root) return;

        if (res[level]){
            res[level].push(root.val);
        }
        else{
            res[level] = [root.val];
        }

        if (root.left){
            recusion(root.left, level+1);
        }
        if (root.right){
            recusion(root.right, level+1);
        }
    }
};


/**
 * 第二种层序遍历:迭代
 * @param root
 * @returns {Array}
 * 执行用时 :80 ms, 在所有 JavaScript 提交中击败了73.64%的用户
 * 内存消耗 :34.8 MB, 在所有 JavaScript 提交中击败了28.36%的用户
 */
var levelOrder2 = function(root) {
    var res = [];
    if (!root) return res;

    var queue = [root];
    while(queue.length){

        //内循环把这一层级的所有节点都放入tempQueue队列中,每一个外循环则是每一层级重新开始
        var arr = [], tempQueue = [];
        while(queue.length){
            var current = queue.shift();
            arr.push(current.val);

            if (current.left){
                tempQueue.push(current.left);
            }
            if (current.right){
                tempQueue.push(current.right);
            }
            console.log("tempQueue.length: ", tempQueue.length, ", queue.length: ", queue.length);
            console.log("-----------")
        }
        res.push(arr);
        queue = tempQueue;

        console.log(JSON.stringify(res))
        console.log("***************************")
    }
    return res;
};

// function TreeNode(val){
//     this.val = val;
//     this.left = this.right = null;
// }
//
// var node = new TreeNode(23);
// node.left = new TreeNode(16);
// node.right = new TreeNode(45);
// node.left.left = new TreeNode(3);
// node.left.right = new TreeNode(22);
// node.right = new TreeNode(45);
// node.right.left = new TreeNode(37);
// node.right.right = new TreeNode(99);
// console.log(levelOrder2(node));

6、第104题:二叉树的最大深度

二叉树的最大深度和求二叉树的层级遍历差不多

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**  二叉树的最大深度
 * 给定一个二叉树,找出其最大深度。
 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
 说明: 叶子节点是指没有子节点的节点。
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 * 第一种方式:递归
 * 执行用时 :96 ms, 在所有 JavaScript 提交中击败了51.18%的用户
 * 内存消耗 :37.1 MB, 在所有 JavaScript 提交中击败了40.00%的用户
 */
var maxDepth = function(root) {
    if (!root) return 0;

    var maxLevel = 1;
    recusion(root, 1);
    return maxLevel;

    function recusion(root, level){

        if (level > maxLevel) {
            maxLevel = level;
        }

        if (root.left){
            recusion(root.left, level+1);
        }
        if (root.right){
            recusion(root.right, level+1);
        }
    }
};


/**
 * 第二种:迭代
 * @param root
 * @returns {number}
 执行用时 :88 ms, 在所有 JavaScript 提交中击败了81.91%的用户
 内存消耗 :36.8 MB, 在所有 JavaScript 提交中击败了93.61%的用户
 */
var maxDepth2 = function(root) {
    if (!root) return 0;

    var level = 0, queue = [root];
    while(queue.length){
        var tempQueue = [];
        //内循环,每次把整个层级节点遍历完, tempQueue存储每个层级的所有节点
        while(queue.length){
            var current = queue.shift();

            if (current.left){
                tempQueue.push(current.left);
            }
            if (current.right){
                tempQueue.push(current.right)
            }
        }
        level++;
        queue = tempQueue;
    }
    return level;
};


// function TreeNode(val){
//     this.val = val;
//     this.left = this.right = null;
// }
//
// var node = new TreeNode(3);
// node.left = new TreeNode(9);
// node.right = new TreeNode(20);
// node.right.left = new TreeNode(15);
// node.right.right = new TreeNode(7);
// console.log(maxDepth(node))

7、第662题:二叉树最大宽度

这个题和二叉树层级遍历/求最大深度类似,但比层级遍历要绕要麻烦点。

迭代方式:迭代遍历,用2个栈,一个用来存储每一层级的节点,另一个栈用来存储每个节点的编号。

对节点进行编号,规则:根节点编号从0开始,左子节点编号 = 父节点编号 * 2 + 1, 右子节点编号 = 父节点编号 * 2 + 2;

递归方式:规则同迭代方式,也是对节点进行编号

如图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 给定一个二叉树,编写一个函数来获取这个树的最大宽度。树的宽度是所有层中的最大宽度。这个二叉树与满二叉树(full binary tree)结构相同,但一些节点为空。
 每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。

 示例 1:
 输入:
       1
    /   \
   3     2
  / \     \
 5   3     9
 输出: 4
 解释: 最大值出现在树的第 3 层,宽度为 4 (5,3,null,9)。

 示例 2:
 输入:
      1
     /
    3
  / \
 5   3
 输出: 2
 解释: 最大值出现在树的第 3 层,宽度为 2 (5,3)。

 示例 3:
 输入:
     1
    / \
   3   2
  /
 5
 输出: 2
 解释: 最大值出现在树的第 2 层,宽度为 2 (3,2)。

 示例 4:
 输入:
          1
        / \
       3   2
     /     \
    5       9
   /         \
  6           7
 输出: 8
 解释: 最大值出现在树的第 4 层,宽度为 8 (6,null,null,null,null,null,null,7)。

 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 * 第一种方式:递归
 * 执行用时 :84 ms, 在所有 JavaScript 提交中击败了100.00%的用户
 * 内存消耗 :36.7 MB, 在所有 JavaScript 提交中击败了37.50%的用户
 */
var widthOfBinaryTree = function(root) {

    if (!root) return 0;

    //queue存储节点,numArr存储节点对应的节点编号位置
    var queue = [root], numArr = [0], maxWidth = 1;

    while (queue.length) {
        //tempQueue存储每一层级所有的节点,tempNumArr存储对应节点的编号位置
        var tempQueue = [], tempNumArr = [];
        while (queue.length) {
            var node = queue.shift(), num = numArr.shift(); //取出栈底节点和编号

            if (node.left) {
                tempQueue.push(node.left);
                tempNumArr.push(num * 2 + 1);
            }
            if (node.right) {
                tempQueue.push(node.right);
                tempNumArr.push(num * 2 + 2);
            }
        }
        var tempWidth = 0;
        //计算tempNumArr中存储的这一层的宽度, 最后一位元素存储这一层级最大宽度的编号
        if (tempNumArr.length) {
            tempWidth = tempNumArr[tempNumArr.length - 1] - tempNumArr[0] + 1;
        }
        if (tempWidth > maxWidth) {
            maxWidth = tempWidth;  //更新最大宽度
        }

        //开始下一个层级的宽度计算
        queue = tempQueue;
        numArr = tempNumArr;
    }

    return maxWidth;
};


/**
 * 第二种递归方式:
 * @param root
 * @returns {number}
 * 执行用时 :84 ms, 在所有 JavaScript 提交中击败了100.00%的用户
 * 内存消耗 :36 MB, 在所有 JavaScript 提交中击败了75.00%的用户
 */
var widthOfBinaryTree2 = function(root) {

    if (!root) return 0;

    var res = [], maxWidth = 1;
    recusion(root, 0, 0);
    return maxWidth;

    function recusion(root, level, num){

        if (res[level]){
            res[level].push(num);
        }
        else{
            res[level] = [num];
        }

        //计算最大宽度
        var tempArr = res[level];
        var tempWidth = tempArr[tempArr.length - 1] - tempArr[0] + 1;
        if (tempWidth > maxWidth) {
            maxWidth = tempWidth;
        }

        if (root.left){
            recusion(root.left, level + 1, num * 2 + 1);
        }
        if (root.right){
            recusion(root.right, level + 1, num * 2 + 2);
        }
    }
};




// function TreeNode(val){
//     this.val = val;
//     this.left = this.right = null;
// }
//
// //[1,1,1,1,null,null,1,1,null,null,1]
// var root = new TreeNode(1);
// root.left = new TreeNode(1);
// root.right = new TreeNode(1);
// root.left.left = new TreeNode(1);
// root.left.right = new TreeNode(3);
// root.right.right = new TreeNode(9);
// console.log(widthOfBinaryTree(root));
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-09-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【算法千题案例】⚡️每日LeetCode打卡⚡️——64. 二叉树的所有路径
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
呆呆敲代码的小Y
2021/10/29
2560
【算法千题案例】⚡️每日LeetCode打卡⚡️——64. 二叉树的所有路径
一天一大 leet(二叉树的最大深度)难度:简单-Day20200728
题目: 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 示例: 叶子节点是指没有子节点的节点。 说明: 给定二叉树 [3,9,20,null,null,15
前端小书童
2020/09/24
2010
一天一大 leet(二叉树的最大深度)难度:简单-Day20200728
【数据结构与算法】一起搞定面试中的二叉树(一)
最近总结了一些数据结构和算法相关的题目,这是二叉树相关面试题的总结,是用java实现的,由于篇幅有限,因此分为两部分,这是第一部分总结。先上二叉树的数据结构:
用户1634449
2018/10/18
4050
94. 二叉树的中序遍历
递归方式整体思路都是类似的,唯一不同的地方在于将节点放入结果数组的时机。需要跟前中后的顺序对应起来。
chuckQu
2022/08/19
1610
JavaScript算法题总结 (三)二叉树
BM23 二叉树的前序遍历 /* * function TreeNode(x) { * this.val = x; * this.left = null; * this.right = null; * } */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return int整型一维数组 */ function preorderTraversal( root )
henu_Newxc03
2022/05/12
2530
JavaScript算法题总结 (三)二叉树
【剑指offer】5.二叉树的镜像和打印
导读: 分类:技术干货 题目:二叉树的遍历和重建 一起重温《剑指offer》,再也不怕手写算法啦! 二叉树简介 基本结构: function TreeNode(x) { this.val = x; this.left = null; this.right = null; } 二叉树的前序、中序、后序遍历的定义: 前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树; 中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树; 后序遍历:对任一子树,先遍历其左子
ConardLi
2019/09/08
3960
相同的树、对称二叉树、翻转二叉树
JavaScript实现LeetCode第100题:相同的树 JavaScript实现LeetCode第101题:对称二叉树 JavaScript实现LeetCode第226题:翻转二叉树 这几道题其实很相似,所以可以放在一起理解。 相同的树 题目描述 给定两个二叉树,编写一个函数来检验它们是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入: 1 1 / \ / \ 2 3
木子星兮
2020/07/17
4650
相同的树、对称二叉树、翻转二叉树
平衡二叉树
完整高频题库仓库地址:https://github.com/hzfe/awesome-interview
HZFEStudio
2021/09/18
3930
226. 翻转二叉树
谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。
lucifer210
2019/09/04
4550
【数据结构与算法】二叉树
对于后序遍历,向回走时,需要处理完右子树才能 pop 出栈。如何知道右子树处理完成呢?
程序员波特
2024/09/28
710
【数据结构与算法】二叉树
144. 二叉树的前序遍历
先使用递归来求解。前序遍历的顺序是根左右,因此先将当前节点的值放入结果数组中,然后再递归的求出左节点和右节点即可。
chuckQu
2022/08/19
1780
一天一大 lee(平衡二叉树)难度:简单-Day20200817
题目:: https://leetcode-cn.com/problems/balanced-binary-tree/
前端小书童
2020/09/24
3260
一天一大 lee(平衡二叉树)难度:简单-Day20200817
Java集合与数据结构——二叉树02
我们将求二叉树的叶子节点数量这个问题,看成求 二叉树的 左子树的叶子节点 + 右子树的叶子节点
RAIN7
2022/03/29
1840
Java集合与数据结构——二叉树02
145. 二叉树的后序遍历
写过前序和中序遍历的递归,想必后序遍历也不在话下。需要注意将节点的值放入结果数组的顺序。
chuckQu
2022/08/19
1800
二叉树的所有路径
深度优先遍历二叉树,将路径节点拼接字符串,遍历到根节点之后将拼接的字符串推入目标数组,首先如果没有节点则直接返回一个空数组,之后定义目标数组target,如果没有定义节点则返回空,如果没有左孩子以及右孩子即叶子节点,则将缓存字符串推入数组并返回结束递归,如果存在左孩子,则向左递归并将左孩子的节点值拼接到字符串并传递,如果存在右孩子,则向右递归并将右孩子节点的值拼接到字符串并传递,之后启动递归,注意题目要求是字符串而不是数字,所以需要将启动时的节点值转为字符串,最后返回目标数组即可。
WindRunnerMax
2020/09/07
3810
【leetcode系列】104. 二叉树的最大深度
https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/description/
lucifer210
2019/08/16
4820
翻转二叉树
本题是经典的二叉树操作的题目,直接从根节点进行递归遍历,并从叶子节点进行翻转,如果当前遍历到root,那么只需要继续交换两棵子树的位置即可完成翻转,首先判断节点是否存在,不存在则直接返回空节点,之后递归左子树以及右子树之后定义一个解构赋值的操作(ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构赋值),将左子树与右子树交换位置,类似于后续递归遍历,由于不断进行递归操作整体是由叶节点开始进行交换的,最后返回根节点即可。
WindRunnerMax
2020/09/18
3510
JavaScript刷LeetCode拿offer-二叉树层序遍历篇
博主最近在刷leetcode,做到二叉树套题的时候发现很多题的解题思路都是基于二叉树的层序遍历来完成的,因此写下这篇文章,记录一下二叉树层序遍历这件"神器"在实战的运用。
hellocoder2028
2022/10/31
2310
备战蓝桥杯————二叉树解题思维1
不论使用哪种思维模式,都要思考每个单独的二叉树节点需要做什么以及何时做(前序、中序、后序位置)。在递归函数中,你只需关注当前节点,而不必操心其他节点,因为递归会在所有节点上执行相同的操作。         二叉树算法的重要性不言而喻。例如,快速排序和归并排序,两种经典排序算法,实际上可以看作是二叉树的前序遍历和后序遍历。对于这两种排序算法,我们可以将其理解为对二叉树节点的特殊处理:前序位置在进入节点时执行,后序位置在离开节点时执行,中序位置在左子树遍历完后、即将开始遍历右子树时执行。这种理解将帮助你深入理解这些高级算法,甚至能够将二叉树的思维应用到动态规划、回溯算法、分治算法和图论算法等其他领域。
小小程序员
2024/02/26
1380
备战蓝桥杯————二叉树解题思维1
一天一大 lee(翻转二叉树)难度:简单-Day20200916
题目:[1] 翻转一棵二叉树。 示例: 4 / \ 2 7 / \ / \ 1 3 6 9 输出 4 / \ 7 2
前端小书童
2020/09/24
2760
一天一大 lee(翻转二叉树)难度:简单-Day20200916
相关推荐
【算法千题案例】⚡️每日LeetCode打卡⚡️——64. 二叉树的所有路径
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验