如何计算二叉树中正确子项的数量?
这意味着我只希望孩子被标记为正确。
实施例。
(Left | Right)
F(Root)
G | H
T U | I J
正确的孩子是U,H和J。
找到这些算法的算法是什么。
答案 0 :(得分:6)
int count(Tree *r){
if(r == NULL) return 0;
int num_l=0, num_r=0;
if(r->left != NULL)
num_l = count(r->left);
if(r->right != NULL)
num_r = count(r->right)+1;
return num_l+num_r
}
答案 1 :(得分:1)
以递归方式,
你会调用一个函数来遍历你的树, 对于当前节点,您需要: 检查当前节点是否具有正确的子节点(然后递增计数器),然后为右节点递归调用该函数。 检查当前节点是否已离开子节点,以递归方式为左节点调用该函数。
这应该有用。
答案 2 :(得分:1)
在树上进行简单的遍历(即按顺序发布顺序),如果每个节点都有正确的子节点,则执行+1。
示例(没有尝试编译并检查它):
int countRightChildren(Node root)
{
if (root == null) return 0;
int selfCount = (root.getRightChild() != null) ? 1 : 0;
return selfCount + countRightChildren(root.getLeftChild()) + countRightChildren(root.getRightChild());
}
答案 3 :(得分:0)
你可以递归地执行:
=
#
R子树中的R子项+
#R
L-subtree中的孩子
int countRChildren(Node *root) {
if(!root) // tree does not exist.
return 0;
// tree exists...now see if R node exits or not.
if(root->right) // right node exist
// return 1 + # of R children in L/R subtree.
return 1 + countRChildren(root->right) + countRChildren(root->left);
else // right nodes does not exist.
// total count of R children will come from left subtree.
return countRChildren(root->left);
}
答案 4 :(得分:0)
这包括我如何构建结构
struct Item
{
int info;
struct Item* right;
struct Item* left;
};
typedef struct Item* Node;
int countRightSons(Node tree)
{
if(!tree)
return 0;
if(tree->right != NULL)
return 1 + countRightSons(tree->right) + countRightSons(tree->left);
return countRightSons(tree->left);
}