如何计算二叉树中正确子项的数量?

时间:2010-04-14 04:30:28

标签: algorithm data-structures binary-tree

如何计算二叉树中正确子项的数量?

这意味着我只希望孩子被标记为正确。

实施例。

(Left | Right)

      F(Root)    
  G   |   H     
T   U |  I  J  

正确的孩子是U,H和J。

找到这些算法的算法是什么。

5 个答案:

答案 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 children =# 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);
}