我试图使用递归来查找BST中的节点数。这是我的代码
struct Node{
int key;
struct Node* left;
struct Node* right;
Node(){
int key = 0;
struct Node* left = nullptr;
struct Node* right = nullptr;
}
};
src_root是树的根节点的地址。
int BST::countNodes(Node* src_root, int sum){
if((src_root==root && src_root==nullptr) || src_root==nullptr)
return 0;
else if(src_root->left==nullptr || src_root->right==nullptr)
return sum;
return countNodes(src_root->left, sum + 1) + countNodes(src_root->right, sum + 1) + 1;
}
但是,如果有3个节点,我的代码似乎只能工作。任何大于3的都会给出错误的答案。请帮我弄清楚它有什么问题。谢谢!
答案 0 :(得分:0)
很久以前,因为我在C / C ++中做了什么,所以如果可能有一些语法错误。
int BST::countNodes(Node *scr_root)
{
if (scr_root == null) return 0;
return 1 + countNodes(scr_root->left) + countNodes(scr_root->right);
}
我认为这样做会有所作为。
答案 1 :(得分:0)
您的实施中存在多个逻辑和结构问题。 Casperah给了你“干净”的答案,我认为你已经在网上找到了(如果你还没有做过那个研究,你就不应该发布你的问题)。因此,您正在寻找的不是别人的解决方案,而是如何修复自己的解决方案。
按照您发现的任何顺序修复这些项目;这个想法是为了学习。但请注意,您的最终代码应该与Casperah提供的答案非常相似。