第三部分 數據結構 -- 第三章 樹1368:對稱二叉樹(tree_c)

1368:對稱二叉樹(tree_c)

時間限制: 1000 ms 內存限制: 65536 KB
提交數: 2821 通過數: 1123
【題目描述】
如果二叉樹的左右子樹的結構是對稱的,即兩棵子樹皆爲空,或者皆不空,則稱該二叉樹是對稱的。編程判斷給定的二叉樹是否對稱.

例:如下圖中的二叉樹T1是對稱的,T2是不對稱的。

二叉樹用順序結構給出,若讀到#則爲空,二叉樹T1=ABCDE,T2=ABCD#E,如果二叉樹是對稱的,輸出“Yes”,反之輸出“No”。

【輸入】
二叉樹用順序結構給出,若讀到#則爲空。

【輸出】
如果二叉樹是對稱的,輸出“Yes”,反之輸出“No”。

【輸入樣例】
ABCDE
【輸出樣例】
Yes


思路:1.從下表爲1時開始遍歷,每次+2,就會到另一棵子樹的最左邊,
2.判斷每對同一節點的子節點,從第二個開始,因爲第一個是根節點,給出的順序中,同個節點的兩個子節點是相鄰的如果其中恰好有個是空的,它就不是對稱二叉樹。

#include<cstdio>
#include<iostream>
#include<cstring>
#define N 1001
using  namespace std;
char s[N];
int main(){
  
	cin >> s;
	int lena = strlen(s);
	s[lena] = '#';
	 bool flag1 = true;
	/*if(lena%2 == 0){//如節點個數爲偶數,那麼除根節點後
	cout <<"No" << endl;
	return 0;//剩餘奇數個,無法滿足兩棵子樹皆空或都不空
	}*/
	for(int i = 1; i < lena; i += 2){
		if((s[i] =='#' && s[i+1] !='#') || (s[i+1] =='#'&&s[i] !='#'))
		{//判斷每對同一節點的子節點,從第二個開始,因爲第一個是根節點,給出的順序中,同個節點的兩個子節點是相鄰的如果其中恰好有個是空的,它就不是對稱二叉樹。
			flag1 = false;
			break;
		}
	}
	if(flag1)
	cout << "Yes" << endl;
	else
    cout << "No" << endl;
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章