輸出利用二叉樹存儲的普通樹的度

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

輸入

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

輸出

若表示的二叉樹對應普通樹,則該普通樹的度;否則輸出ERROR。

樣例輸入

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

樣例輸出

3
1
ERROR
3
1
提 交
gcc
1
 
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 m;
void find(node *&p,int k)
{
	if (p == NULL)
		return;
	if (m < k)
	{
		m = k;
	}
	find(p->left, 0);
	find(p->right, k + 1);
}

int main()
{
	set(p);
	m = 0;
	if (p->right != NULL)
	{
		cout << "ERROR";
	}
	else
	{
		find(p, 0);
		cout << m + 1;
	}
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章