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;
}