leetcode刷题记录:二叉树02(思路篇)

这篇具有很好参考价值的文章主要介绍了leetcode刷题记录:二叉树02(思路篇)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考labuladong的算法小抄:https://labuladong.online/algo/data-structure/binary-tree-part1/
复习二叉树纲领篇,二叉树解题的思维模式分两类:

1、是否可以通过遍历一遍二叉树得到答案?如果可以,用一个 traverse 函数配合外部变量来实现,这叫「遍历」的思维模式。

2、是否可以定义一个递归函数,通过子问题(子树)的答案推导出原问题的答案?如果可以,写出这个递归函数的定义,并充分利用这个函数的返回值,这叫「分解问题」的思维模式。

无论使用哪种思维模式,你都需要思考:

如果单独抽出一个二叉树节点,它需要做什么事情?需要在什么时候(前/中/后序位置)做?其他的节点不用你操心,递归函数会帮你在所有节点上执行相同的操作。

226 Invert binary tree 反转二叉树

很简单,左右子树分别翻转即可,前序遍历和后序遍历都可以。
前序遍历:先把左右子节点点交换,再分别对左右字数做同样的操作。
后序遍历:先把左右子树反转,再反转自己的左右节点。

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if (root == NULL) {
            return root;
        }
        TreeNode *temp = root->left;
        root->left = root->right;
        root->right = temp;
        invertTree(root->left);
        invertTree(root->right);
        return root;
    }
};

116 填充节点的右侧指针

思路:传统题目是遍历所有节点,本题是遍历两个相邻节点之间的空隙。把原二叉树看做成一个三叉树.

class Solution {
public:
    Node* connect(Node* root) {
        if(root == NULL){
            return root;
        }
        traverse(root->left, root->right);
        return root;
    }
    void traverse(Node* n1, Node* n2) {
        if(n1 == NULL || n2 == NULL){
            return;
        }
        n1->next = n2;
        traverse(n1->left, n1->right);
        traverse(n1->right, n2->left);
        traverse(n2->left, n2->right);
    }
};

114 将二叉树展开为链表

函数作用:输入root,就会将其拉平为一条链表。
用分解的算法,在后序位置,将root的右子树接到左子树下方。文章来源地址https://www.toymoban.com/news/detail-827908.html

class Solution(object):
    def flatten(self, root):
        """
        :type root: TreeNode
        :rtype: None Do not return anything, modify root in-place instead.
        """
        if not root:
            return
        self.flatten(root.left)
        self.flatten(root.right)
        temp = root.right
        root.right = root.left
        root.left = None
        p = root
        while p.right:
            p = p.right
        p.right = temp
        return root

到了这里,关于leetcode刷题记录:二叉树02(思路篇)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LeetCode刷题——617. 合并二叉树

    给你两棵二叉树: root1 和 root2 。 想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为

    2024年02月13日
    浏览(35)
  • leetcode刷题(10)二叉树(4)

    各位朋友们,大家五一劳动节快乐啊,在这里祝大家假期玩得愉快!但是在玩耍的期间不要忘记了敲代码哦。今天我为大家分享的是二叉树的第四篇,废话不多说,我们一起来看看吧。 leetcode之二叉树的最近公共祖先(难度:中等) 给定一个二叉树, 找到该树中两个指定节点

    2024年02月02日
    浏览(23)
  • LeetCode刷题--- 二叉树的所有路径

    个人主页:元清加油_【C++】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题       【     】 【C++】                  【   】 数据结构与算法       【    】 前言:这个专栏主要讲述递归递归、搜索与回溯算法,所以下面题目主要也是这些算法做的

    2024年01月19日
    浏览(29)
  • Leetcoder Day12| 二叉树 part02

    语言:Java/C++  给你一个二叉树,请你返回其按层序遍历得到的节点值。 (即逐层地,从左到右访问所有节点)。 在昨天的二叉树理论基础里有提到,层序遍历需要借助队列实现。 队列先进先出,符合一层一层遍历的逻辑 这里要注意的是,定义每一层元素列表的时候ListIn

    2024年01月20日
    浏览(28)
  • 算法刷题-二叉树3

    给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下: 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL 。 初始状态下,所有 next 指针都被设置为 NULL 。 思路 把

    2024年02月06日
    浏览(23)
  • 【LeetCode】(力扣) c/c++刷题-145. 二叉树的后序遍历

    来源:力扣(LeetCode) 链接: 力扣  

    2024年02月01日
    浏览(49)
  • 算法刷题Day 15 二叉树的层序遍历+翻转二叉树+对称二叉树

    层序遍历二叉树需要借助到队列 递归方法 迭代方法 就是简单的用上前序遍历迭代方法实现,不用想的太复杂 递归方法 迭代方法 这里使用了队列来存放两个要比较的结点。也可以使用栈,方法是类似的。

    2024年02月12日
    浏览(28)
  • 算法刷题Day 17 平衡二叉树+二叉树的所有路径+左叶子之和

    计算左右两棵子树的高度,如果有一个高度是-1(有一棵子树不平衡),直接返回-1,否则计算高度差,判断是否不平衡 使用 回溯 的方法,每次处理一个节点之前要把它push进table里,处理完之后又要把它pop出来 处理一个节点时,要判断它是否是左节点(需要父节点,可以通

    2024年02月15日
    浏览(28)
  • 二叉树-我的基础算法刷题之路(七)

    本篇博客旨在整理记录自已对二叉树的一些总结,以及刷题的解题思路,同时希望可给小伙伴一些帮助。本人也是算法小白,水平有限,如果文章中有什么错误之处,希望小伙伴们可以在评论区指出来,共勉 💪。 【二叉树 Binary Tree】是一种非线性数据结构,代表着祖先与后

    2023年04月09日
    浏览(26)
  • 【刷题笔记8.11】LeetCode题目:二叉树中序遍历、前序遍历、后序遍历

    (一)题目描述 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 (二)分析 二叉树中序遍历,遍历顺序:左节点 -》 根节点 -》 右节点 ( 注意:二叉树的前、中、后序遍历就是以根为基准,前序遍历根在最前面,中序遍历根在中间,后序遍历根在最后面 ) (三)

    2024年02月13日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包