获取二叉树的大小和高度
Getting size and height of binary tree
目前,我正在尝试找到二叉树的高度和大小,但是我遇到了一些问题。我的代码目前无法编译,我无法找出我一生做错了什么。
template <class T>
int getHeight() const {
int height = 0;
Node * heightNode = new Node();
heightNode = _root;
height = max(right->height(), left->height()) + 1;
return height;
}
我的思维过程是不断遍历左右子树,并为我们减少的树的每一层添加 1。但是,我得到的错误是:
- "->高度"的左侧必须指向类/结构/联合/泛型类型
- '_Ty std::max(std::initializer_list<_Elem>,_Pr)' : 期望 2 个参数 - 提供 1 个参数等。
我已经尝试了一些类似这样的事情 ->right.height() 等。
接下来,大小函数
int getSize() const {
int size;
inorderTraverse(cout, this->Node->left); //L
size++; //V
inorderTraverse(cout, this->Node->right);//R
return size;
}
我的想法是使用我已经编写和测试过的无序遍历来尝试遍历每个节点,而不是打印顶点,而是为每个顶点添加 1 的大小。
我的 getSize 操作也遇到了同样的错误。显然,我的C++代码一定存在一些根本性的缺陷,但我自己无法弄清楚。任何帮助将不胜感激。
class BST{
private:
class Node {
public:
T data;
Node * left;
Node * right;
Node * parent;
};
private:
Node * root;
...
}
首先,这里最好摆脱手动内存管理,对左右子节点使用std::unique_ptr
。这些应正确初始化为 nullptr
。非拥有父节点指针可以保留为原始指针,但请注意不要delete
其内容。
class BST
{
private:
class Node
{
public:
T data;
Node* parent;
std::unique_ptr<Node> left;
std::unique_ptr<Node> right;
};
private:
std::unique_ptr<Node> root;
};
然后,类 Node
中的递归高度定义可能如下所示:
int height()
{
//I'm assuming both nodes are either set or unset
if(left == nullptr && right == nullptr)
{
return 0;
}
else
{
return std::max(left->height(), right->height()) + 1;
}
}
上面的函数为根节点(如果它是唯一可用的节点)提供零深度。正如所写,我假设两个节点都已设置或未设置,即不会发生仅设置左节点或仅设置右节点的情况(严格来说,可以省略两个子节点的nullptr
检查)。如果这不成立,可以轻松调整代码。
此外,您还可以通过使用转换为布尔值属性来缩写检查unique_ptr
if(left && right)
{
//...
}
看起来更好一点,
相关文章:
- 从父数组测试用例构造二叉树失败
- 打印时有二叉树问题.用户输入不打印任何内容
- 试图找到二叉树的深度
- 二叉树结构平衡,使用递归时EXC_BAD_ACCESS
- 指向二叉树中新节点的指针
- 我试图用这段代码找到二叉树的高度,但它一直返回 0,有人可以告诉我为什么吗?
- C++:如何计算二叉树中其值模块高度小于 2 的节点数?
- 二叉树级别顺序遍历在leetcode中
- 运行无限循环的最小二叉树问题
- 打印二叉树中的常见元素
- 尝试创建一个程序来查找非二叉树的高度.最终得到一个很长的循环,没有答案
- 二叉树递归的高度
- C++二叉树插入/高度
- 查找非二叉树的高度
- 如何在不使用递归的情况下获取二叉树的最小高度
- 二叉树查找高度
- 获取二叉树的大小和高度
- 二叉树的最小高度
- 在一棵有191个节点且高度为9的二叉树中找到一个键所需的最大比较次数是多少?
- 二叉树中特定节点的高度