1. 程式人生 > >統計利用二叉樹儲存的森林中樹的棵數

統計利用二叉樹儲存的森林中樹的棵數

普通樹及其構成的森林均可轉換成相應的二叉樹,反之亦然。故而可以根據相應的轉換方法去統計某一二叉樹對應的森林中樹的棵數。相應的二叉樹可利用先序遞迴遍歷演算法建立。先序遞迴遍歷建立二叉樹的方法為:按照先序遞迴遍歷的思想將對二叉樹結點的抽象訪問具體化為根據接收的資料決定是否產生該結點從而實現建立該二叉樹的二叉連結串列儲存結構。約定二叉樹結點資料為單個大寫英文字元。當接收的資料是字元"#"時表示該結點不需要建立,否則建立該結點。最後再統計該二叉樹對應的森林中樹的棵數。需要注意輸入資料序列中的"#"字元和非"#"字元的序列及個數關係,這會最終決定建立的二叉樹的形態(序列裡面允許無效字元但需要正確處理)。

輸入

輸入為接受鍵盤輸入的由大寫英文字元和"#"字元構成的一個字串(用於建立對應的二叉樹)。

輸出

輸出該用例對應的二叉樹表示的森林中樹的棵數。

樣例輸入

A#B#CD###
ABC####
AB##C##
ABCD###EF##G##H##
A##B##

樣例輸出

3
1
2
2
1
#include<iostream>
using namespace std;
struct node
{
	char date;
	node *left, *right;
}*p;

void set(node *&p)
{
	char ch;
	cin >> ch;
	if (ch == '#')
	{
		p = NULL;
	}
	else
	{
		p = new node;
		p->date = ch;
		set(p->left);
		set(p->right);
	}
}

int k;
void find(node *&p)
{
	if (p != NULL)
	{
		k++;
		find(p->right);
	}
}
int main()
{
	k = 0;
	set(p);
	find(p);
	cout << k;
	return 0;
}