給定乙個天平長度 輸入格式為
wl dl wr dr
分別代表天平左邊長度,左邊重量, 右邊長度, 右邊重量。
如果重量為0, 說明下面還有乙個天平, 遞迴給出。
樣例輸入:
如果天平是左右重量相等的 輸出yes 否則輸出no。
既然以遞迴的定義輸入, 那麼我們程式最好寫成遞迴建樹,如果有重量是0, 那麼就遞迴建左子樹或者右子樹 , 如果是葉子節點的父節點(這個天平下面沒天平), 那麼就判斷左右是否相等返回即可(也可建乙個全域性變數, 乙個不滿足就可以輸出no了)。 我的程式是把樹建造出來再判斷, 有點冗餘。
#include usingnamespace
std;
const
int maxn =1e6;
struct
node
};node tree[maxn];
const
int root = 1
;int cnt = 0
, ok;
int build(int
u)
if(!wr)
}int post(int
u)
if(!tree[u].wr)
if(tree[u].wl * tree[u].dl != tree[u].wr *tree[u].dr)
ok = 0
;
return tree[u].wl +tree[u].wr;
}int
main()
else printf("\n"
); cnt =root;
build(root);
ok = 1
; post(root);
printf(
"%s\n
",ok ? "
yes":"no"
); }
return0;
}
DFS 新二叉樹
輸入一串二叉樹,用遍歷前序打出。第一行為二叉樹的節點數n n 26 後面n行,每乙個字母為節點,後兩個字母分別為其左右兒子,空節點用 表示。保證 讀入的第乙個結點就是根結點。前序排列的二叉樹。6 abcbdi cj d i j abdicj題最終目的是輸出二叉樹的前序遍歷結果。首先回顧下前序遍歷的形...
UVa 548 二叉樹的遞迴遍歷 dfs)
題意 給一顆點帶權 權值各不相同,都是小於10000的正整數 的二叉樹的中序和後序遍歷,找乙個葉子使得它到根的路徑上的權和最小。如果有多解,該葉子本身的權應盡量小。輸入中每兩行表示一棵樹,其中第一行為中序遍歷,第二行為後序遍歷。首先介紹下二叉樹的三種遍歷 首先我想先改變這幾個遍歷的名字 前根序遍歷,...
二叉樹的dfs遍歷
bt均為樹的根節點,建立好樹的時候返回的是根節點,類似煉表頭指標 先序遍歷 function preorder bt console.log bt.data preorder bt.left preorder bt.right 中序遍歷 function inorder bt inorder bt....