如果二叉樹的左右子樹的結構是對稱的,即兩棵子樹皆為空,或者皆不空,則稱該二叉樹是對稱的。程式設計判斷給定的二叉樹是否對稱。可以根據題意發現他給你的肯定是完全二叉樹(包括#),那麼我們可以從第二個開始兩個兩個判斷,要都有或者都#例:如下圖中的二叉樹t1是對稱的,t2是不對稱的。
二叉樹用順序結構給出,若讀到#則為空,二叉樹t1=abcde,t2=abcd#e,如果二叉樹是對稱的,輸出「yes」,反之輸出「no」。
#include
using
namespace std;
string s;
intmain()
for(
int i=
1;isize()
;i+=2)
if(s[i]
=='#'
&&s[i+1]
!='#'
||s[i]
!='#'
&&s[i+1]
=='#'
) cout<<
"yes"
;return0;
}
題目大概意思就是給你中序遍and按層遍歷然後輸出先序
dbeac
abcde
模擬一下
先是找到a
變成 dbe
c然後找到 b
變成 d
e這樣找出了答案了
#include
using
namespace std;
int len;
char s[
15000
],s1[
15000];
inline
void
dfs(
int l,
int r)}}
cout<;根左右
dfs(l,mid-1)
;//左邊
dfs(mid+
1,r)
;//右邊
}int
main()
#include
using
namespace std;
int n,p,k;
int a[
150000
],vis[
150000];
inline
voidqx(
int x)
inline
voidzx(
int x)
inline
voidhx(
int x)
intmain()
if(p==1)
qx(1)
;//先序遍歷
else
if(p==2)
zx(1)
;//中序遍歷
elsehx(
1);//後序遍歷
return0;
}
樹形dp用dp[i][1/0]表示以i為根節點的樹i要不要選的最大價值,如果這個根要選,那麼遞迴兒子,如果要選,如果兒子代價》0那麼加上兒子,不選,看看兒子要不要選
#include
using
namespace std;
inline
intread()
while
(isdigit
(ch)
)return res*f;
}int n,f[
550000][
2],head[
550000
],tot,a[
17000];
struct node
edge[
550000];
inline
void
add(
int x,
int y)
inline
void
dfs(
int x,
int y)}}
intmain()
dfs(1,
0); cout<<
max(f[1]
[0],f[1]
[1])
;return0;
}
暑期集訓2期3
直接列舉 3000到3000也沒關係。列舉最後的x,容易發現x 的取值不會在序列取值之外。不開long long 會掛掉30分。題目大意兩排數,你的目標是將數值相同的放到一起。滾動不消耗代價。提起消耗的代價為數值。你需要最小化提起的數值限制,也就是移動的最大值盡可能小 30分演算法 一旦乙個數值使用...
暑期集訓2期5
小李是希望小學六年級的學生,在一次數學課上,張老師出了一道題,小李很快就答出來了。這個題目是這樣的 給定乙個正整數 n,請求出 2 n之間長度最長的 成等差數列的素數 質數 例如 當 n 的值為 40 時,在 2 40 之間的全部素數有 2 3 5 7 11 13 17 19 23 29 31 37...
暑期集訓2期4
把已經買過的遊戲給標記一下,然後從第一款遊戲開始買,如果還可以買並且沒有被標記過那麼買 include using namespace std long long n,ans,num,x struct node a 100010 inline intread while isdigit ch res...