返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++二叉树的直径与合并详解
  • 436
分享到

C++二叉树的直径与合并详解

2024-04-02 19:04:59 436人浏览 安东尼
摘要

目录二叉树的直径思路合并二叉树思路1.确定递归函数的参数和返回值: 2.确定终止条件: 3.确定单层递归的逻辑: 总结二叉树的直径 给定一棵二叉树,你需要计算它的直径长度。

二叉树的直径

  • 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。

示例 :

给定二叉树

在这里插入图片描述

返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。

思路

求左右孩子深度的和的最大值



class Solution {
public:
    int res=0; //定义一个全局变量
    int depth(Treenode* root){  //求深度
        if(root==nullptr)  return 0;
        int L=depth(root->left); 
        int R=depth(root->right);
        res=max(res,L+R);
        return max(L,R)+1;
    }
    int diameterOfBinaryTree(TreeNode* root) {
        depth(root);
        return res;
    }
};

合并二叉树

  • 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。

示例 1:

在这里插入图片描述

思路

1.确定递归函数的参数和返回值:

首先那么要合入两个二叉树,那么参数至少是要传入两个二叉树的根节点,返回值就是合并之后二叉树的根节点。

代码如下:

TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2)

2.确定终止条件:

因为是传入了两个树,那么就有两个树遍历的节点t1 和 t2,如果t1 == NULL 了,两个树合并就应该是 t2 了啊(如果t2也为NULL也无所谓,合并之后就是NULL)。

反过来如果t2 == NULL,那么两个数合并就是t1(如果t1也为NULL也无所谓,合并之后就是NULL)。

代码如下:

if (t1 == NULL) return t2; // 如果t1为空,合并之后就应该是t2
if (t2 == NULL) return t1; // 如果t2为空,合并之后就应该是t1

3.确定单层递归的逻辑:

单层递归的逻辑就比较好些了,这里我们用重复利用一下t1这个树,t1就是合并之后树的根节点(就是修改了原来树的结构)。
那么单层递归中,就要把两棵树的元素加到一起。

t1->val += t2->val;

接下来t1 的左子树是:合并 t1左子树 t2左子树之后的左子树。

t1 的右子树:是 合并 t1右子树 t2右子树之后的右子树。

最终t1就是合并之后的根节点。



class Solution {
public:
    TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
        // 判空
        if(root1==nullptr) return root2;
        if(root2==nullptr) return root1;
        // 修改了t1的数值和结构
        root1->val+=root2->val;
        root1->left=mergeTrees(root1->left,root2->left);
        root1->right=mergeTrees(root1->right,root2->right);
        return root1;
    }
};

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: C++二叉树的直径与合并详解

本文链接: https://lsjlt.com/news/132962.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++二叉树的直径与合并详解
    目录二叉树的直径思路合并二叉树思路1.确定递归函数的参数和返回值: 2.确定终止条件: 3.确定单层递归的逻辑: 总结二叉树的直径 给定一棵二叉树,你需要计算它的直径长度。...
    99+
    2024-04-02
  • C++LeetCode543题解二叉树直径
    目录LeetCode 543.二叉树的直径方法一:深度优先搜索求二叉树的深度AC代码C++LeetCode 543.二叉树的直径 力扣题目链接:leetcode...
    99+
    2022-12-16
    C++ 二叉树直径 C++ LeetCode
  • C++如何合并二叉树
    这篇文章主要介绍了C++如何合并二叉树,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。...
    99+
    2023-06-20
  • C++超详细讲解树与二叉树
    目录树树的定义树的名词解释树的表示树的存储结构二叉树的概念及结构二叉树的概念二叉树的性质二叉树的存储结构顺序存储结构链式存储结构树 树的定义 Q:什么是树 A:树是一种 非线性 的数...
    99+
    2024-04-02
  • C++合并二叉树的思路与示例代码
    前言 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点...
    99+
    2024-04-02
  • C++树之遍历二叉树实例详解
    在讲遍历之前,我们要先创建一个树: #include <iostream> using namespace std; typedef struct node; ty...
    99+
    2024-04-02
  • C语言平衡二叉树详解
    目录调整措施:一、单旋转二、双旋转AVL树的删除操作:删除分为以下几种情况:1.要删除的节点是当前根节点T。2、要删除的节点元素值小于当前根节点T值,在左子树中进行删除。3、要删除的...
    99+
    2024-04-02
  • C++实现LeetCode(112.二叉树的路径和)
    [LeetCode] 112. Path Sum 二叉树的路径和 Given a binary tree and a sum, determine if the tree has a...
    99+
    2024-04-02
  • Python实现二叉树结构与进行二叉树遍历的方法详解
    二叉树的建立 使用类的形式定义二叉树,可读性更好 class BinaryTree: def __init__(self, root): self.key = root sel...
    99+
    2022-06-04
    二叉树 遍历 详解
  • C++ 二叉树的实现超详细解析
    目录1、树的概念及结构(了解)1.1树的概念:1.2树的表示法:2、二叉树的概念及结构2.1二叉树的概念:2.2特殊的二叉树:2.3二叉树的性质:2.4二叉树的顺序存储:2.5二叉树...
    99+
    2024-04-02
  • C++二叉搜索树BSTree使用详解
    目录一、概念二、基础操作1.查找find2.插入Insert3.中序遍历InOrder4.删除erase三、递归写法1.递归查找2.递归插入3.递归删除四、应用五、题目练习一、概念 ...
    99+
    2023-03-09
    C++二叉搜索树BSTree C++二叉搜索树 C++ BSTree
  • C语言之平衡二叉树详解
    目录什么是平衡二叉树平衡二叉树的基本特点为什么会出现平衡二叉树二叉树四种不平衡的情况C语言实现平衡二叉树什么是平衡二叉树 平衡二叉树是具有平衡属性的有序二叉树,所谓的平衡即当前树的左...
    99+
    2023-05-17
    C语言二叉树 C语言平衡二叉树
  • C语言数据结构系列篇二叉树的概念及满二叉树与完全二叉树
    链接:C语言数据结构系列之树的概念结构和常见表示方法 0x00 概念 定义:二叉树既然叫二叉树,顾名思义即度最大为2的树称为二叉树。 它的度可以为 1 也可...
    99+
    2024-04-02
  • 详细了解C语言二叉树的建立与遍历
    目录这里给一个样例树:总结这里给一个样例树: 代码: #include <stdio.h> #include <string.h> #include ...
    99+
    2024-04-02
  • C++怎么求二叉树的最大路径和
    本篇内容主要讲解“C++怎么求二叉树的最大路径和”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么求二叉树的最大路径和”吧!求二叉树的最大路径和Given a non-empty...
    99+
    2023-06-20
  • C语言二叉树的概念结构详解
    目录1、树的概念及结构(了解)1.1树的概念:1.2树的表示法:2、二叉树的概念及结构2.1二叉树的概念2.2特殊的二叉树2.2二叉树的性质2.3二叉树的顺序存储2.4二叉树的链式存...
    99+
    2022-11-13
    C语言二叉树 C语言二叉树的创建
  • GoJava算法之二叉树的所有路径示例详解
    目录二叉树的所有路径方法一:深度优先遍历搜索(Java)方法二:广度优先遍历(Go)二叉树的所有路径 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的...
    99+
    2024-04-02
  • Java中关于二叉树的概念以及搜索二叉树详解
    目录一、二叉树的概念为什么要使用二叉树?树是什么?树的相关术语!根节点路径父节点子节点叶节点子树访问层(深度)关键字满二叉树完全二叉树二叉树的五大性质二、搜索二叉树插入删除hello...
    99+
    2024-04-02
  • 关于Java的二叉树、红黑树、B+树详解
    目录1、二叉查找树2、平衡二叉查找树3、红黑树:4、 B树:5、 B+树6、红黑树 VS B+树数组和链表是常用的数据结构,数组虽然查找快(有序数组可以通过二分法查找),但是插入和删...
    99+
    2023-05-20
    Java二叉树 Java红黑树 JavaB+树
  • C++详解数据结构中的搜索二叉树
    目录定义查找某个元素构造搜索二叉树往搜索二叉树中插入元素搜索二叉树删除节点定义 搜索二叉树,也称有序二叉树,排序二叉树,是指一棵空树或者具有下列性质的二叉树: 1、若任意节点的左子树...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作