981统计利用二叉树存储的森林中树的棵数

 

 求用二叉树存储的森林中树的棵数,我们首先需要的是将二叉树转换为森林。

  那么如何计算二叉树存储的森林中树的棵数?

  有这么一个森林与二叉树转换规则:

    从二叉树根开始一直往右子树走,一共路过几个节点,对应的森林就有几个根,

  也就是说,对应的森林有几棵树 高度为h的满二叉树最右边一路有h个节点(就是  

  高度为n),因此对应的森林有h棵树.  

 下面给出二叉树转换成森林的示意图:

    (没找到作图工具,强行ps做的,线没有对齐,别介意)

#include <iostream>
using namespace std;
typedef struct BTNode
{
    char data;
    BTNode *lchild, *rchild;
}BTNode;

void CreatTree(BTNode *&tree)
{
    char ch;
    cin >> ch;
    tree = new BTNode;
    if (ch == '#')
        tree = NULL;
    else
    {
        tree->data = ch;
        CreatTree(tree->lchild);
        CreatTree(tree->rchild);
    }
}
void Forest(BTNode *tree, int &treeCount)
{
    while (tree != NULL)
    {
        treeCount++;
        tree = tree->rchild;
    }
}
void DestoryTree(BTNode *&tree)
{
    if (tree != NULL)
    {
        DestoryTree(tree->lchild);
        DestoryTree(tree->rchild);
        delete tree;
    }
}
int main()
{
    BTNode *tree;
    CreatTree(tree);
    int treeCount = 0;
    Forest(tree, treeCount);
    cout << treeCount;
    DestoryTree(tree);
    system("pause");
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/nianliwanshao/p/9071508.html