ProDeveloperTutorial.com

教程和编程解决方案
菜单
  • Shell脚本
  • 系统设计
  • Linux系统编程
  • 4g LTE
  • 编码问题
  • C
  • C ++
  • DSA
  • GIT

二叉树的国彩网

前开发者教程 2020年3月30日

在本章中,我们将解决如何找出二叉树的国彩网。

 

问题陈述:

 

给您二叉树的根节点,您需要找到该树的国彩网。

 

现在等一下

国彩网术语通常用于参考圆,但是如何将其与树一起使用?

 

在树中,国彩网通常是指树中2个叶节点之间的最长路径。

 

考虑给定的示例:

 

二叉树的国彩网

 

这里国彩网是2个叶节点之间的最长路径是:

 

H -> e -> b -> a -> c -> f -> i -> j

 

路径如下图所示

 

二叉树的国彩网

 

在本教程中,我们将看到如何解决。

 

因此,从上图可以看到,国彩网等于[左子树的高度+右子树的高度+ 1]。

 

如果国彩网通过根部,则上述公式有效。如果国彩网未穿过根,该结果如下图所示:

 

二叉树的国彩网

 

在上图中,国彩网不会穿过根,而是会穿过另一个子树的根。

 

因此,在这种情况下,我们使用以下公式。

 

最大(left_diameter,right_diameter)

 

因此,我们的完整公式将是:

 

最大值(left_height + right_height + 1,max(left_diameter,right_diameter))。

 

 

所以我们的功能如下:

 

 

int国彩网(节点* p)

{

如果(p == NULL)

返回0;

 

int left_height =高度(p-> left)

int right_height =高度(p-> right)

 

int left_diameter =国彩网(p-> left)

int right_diameter =国彩网(p-> right)

 

int结果=最大值(left_height + right_height + 1,最大值(left_diameter,right_diameter))

}

 

根据上面的功能,

left_height将计算左高度

right_height将计算正确的高度

left_diameter用于计算左子树的国彩网

right_diameter用于计算右子树的国彩网

 

最后,我们将得出结果。

 

C ++解决方案

#include <iostream>
#include <stack>
#include <map>
using namespace std;

// structure to hold binary tree node
struct Node
{
    int data;
    Node *left, *right;

    Node(int data)
    {
        this->data = data;
        this->left = this->right = nullptr;
    }
};

int height(Node* node) 
{ 
   if(node == NULL) 
       返回0; 

   return 1 + max(height(node->left), height(node->right)); 
} 

int max(int a, int b) { return (a > b)? a : b; } 

  
int get_diameter_of_b_tree(Node * tree) 
{ 
   if (tree == NULL) 
     返回0; 
  
  int lheight = height(tree->left); 
  int rheight = height(tree->right); 
  
  int l_diameter = get_diameter_of_b_tree(tree->left); 
  int r_diameter = get_diameter_of_b_tree(tree->right); 
  
  return max(lheight + rheight + 1, max(l_diameter, r_diameter)); 
}  
  
int main()  
{  
    Node* root = nullptr;
    /* Binary tree:
              16
            /   \
           /     \
          10      25
         /  \    /  \
        /    \  /    \
       7    15 18     30

    */

    root = new Node(16);
    root->left = new Node(10);
    root->right = new Node(25);
    root->left->left = new Node(7);
    root->left->right = new Node(15);
    root->right->left = new Node(18);
    root->right->right = new Node(30);

    int diameter = get_diameter_of_b_tree(root);
    cout<<"The diameter is = "<<diameter<<endl;

    返回0;  
}  

输出:

The diameter is = 5

该网站上可用的教程列表:

C编程20+章C ++编程80+章
100多个编码问题数据结构和算法85+章
系统设计20+章Shell脚本编写12章
4g LTE 60+章节最常见的编码问题
5G NR 50+章Linux系统编程20+章
分享
电子邮件
鸣叫
领英
Reddit
绊倒
Pinterest的
上一篇文章
下一篇

关于作者

前开发者教程

每天我们都会讨论竞争性编程问题,请加入我们的网站:   电报频道

ProDeveloperTutorial.com

教程和编程解决方案
版权© 2020 ProDeveloperTutorial.com
从以下课程获得热门课程: 教育性的

<span id="Lg3aN3p"><dir id="Btt1Rwx" class="BHh4x9r"><strong id="rMXsp2R"></strong></dir></span>
<dir class="ovBxvv2"></dir>
    <acronym id="hRXSLDT" class="hN6mW5R"><sup class="tyS2Id5"></sup></acronym>

    <output class="DwBuMZd"><textarea id="CCC203J"></textarea></output>
    <ol class="niebgLI"><strike id="mhjfNMO"><label class="eg1QvXh"><textarea class="Q60kFEZ"></textarea></label></strike></ol>

  • <span class="i64GwFk"></span>
    <dir class="DUkUsLA"><audio class="aRsQdP3"><figcaption class="XyPPnSW"></figcaption></audio></dir>
    • <ruby class="EcuBVjz"><article id="gB3h5Ps" class="gGYKC9v"></article></ruby>
      <datalist class="NxYmJF1"></datalist>