【问题标题】:Finding max height/depth in Binary Tree在二叉树中查找最大高度/深度
【发布时间】:2021-05-20 14:17:59
【问题描述】:

在了解了二叉树的基础知识后,我在 C++ 中定义如下:

struct Node
{
    int key;
    Node *left;
    Node *right;
}*left=NULL,*right=NULL;

int getDepth(Node* t)
{
  if (t == NULL)
    return 0;
  else
    {
      int lDepth = getDepth(t->left);
      int rDepth = getDepth(t->right);

      if (lDepth > rDepth)
        return(lDepth + 1);
      else 
        return(rDepth + 1);
    }
}
int main()
{
    // root
    Node* root = new Node();
    root->key = 1;
    
    // left subtree
    root->left = new Node();
    root->left->key = 2;
    root->left->left = new Node();
    root->left->left->key = 4;
    root->left->right = new Node();
    root->left->right->key = 5;
    
    // right subtree
    root->right = new Node();
    root->right->key = 3;
}

现在,如果我尝试使用此代码查找最大高度/深度,它会返回 3 而不是 2。可能是什么原因?另外,为什么我没有找到这种为任何地方的节点分配值的方法?

编辑:添加请求的代码

【问题讨论】:

  • 很难判断你是否没有展示你的算法来寻找深度 - 但我猜你正在计算根节点。
  • 1.您错过了添加计算深度的代码。 2.您错过了初始化子节点指针。 struct Node { /*... */ } *left = NULL, *right = NULL; 创建两个 Node* 类型的全局变量。如果您想提供默认值,则必须如下所示:struct Node { Node* left = nullptr; Node* right = nullptr; };(旁注:nullptr 是 C++ keyword 您应该更喜欢旧/过时的 C macrosNULL).
  • 添加完整代码

标签: c++ c++11 data-structures


【解决方案1】:

两个问题:

1。您错误地设置了结构 Node

要定义成员具有初始值的类型Node,您的语法略有错误。相反,这样做:

struct Node {
    int key = 0;
    Node *left = nullptr;
    Node *right = nullptr;
};

2。树的高度是 3。

这是您创建的树的可视化表示。它有 3 个级别。

         1
        / \
       2   3
      / \
     4   5

【讨论】:

  • 但是here,高度是2
  • 取决于您的计数方式,该页面显示“空树的高度为 0”,但是您的代码中的“空”树为 0,只有根的树为 1,等等...您应该将 getDepth 中的 null 大小写更改为返回 -1
  • @Rohit 您提供的链接错误。它高度是2,但实际上它也是3。那里提供的代码也将计算高度为 3。此外,再一次为极客提供了一个关于极客的错误代码示例(包括 bits/stdc++.h、using namespace std、不一致的缩进样式、elsereturn 之后...)。
  • 极客对极客的文章绝对糟糕。将一棵空树(没有节点)的高度定义为 0 并将具有 1 个节点的树的高度定义为 also0 在数学上至少可以说是尴尬的。它阻止我们使用该函数根据其子子树的高度来计算节点的高度,因为 - 因为它很重要,如果那里有 1 个节点或那里没有节点。非常糟糕的高度定义。至少他们应该说没有节点的树有 undefined 高度。然后你可以用 (-1) 或其他东西来表示它。
猜你喜欢
  • 2021-09-07
  • 1970-01-01
  • 2015-02-12
  • 2016-01-24
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
  • 2020-04-27
  • 1970-01-01
相关资源
最近更新 更多