Uva 839天平(二叉樹dfs, 遞迴建樹)

2022-08-17 02:03:11 字數 1146 閱讀 3514

給定乙個天平長度 輸入格式為

wl dl wr dr 

分別代表天平左邊長度,左邊重量, 右邊長度, 右邊重量。

如果重量為0, 說明下面還有乙個天平, 遞迴給出。

樣例輸入:

如果天平是左右重量相等的 輸出yes 否則輸出no。

既然以遞迴的定義輸入, 那麼我們程式最好寫成遞迴建樹,如果有重量是0, 那麼就遞迴建左子樹或者右子樹 , 如果是葉子節點的父節點(這個天平下面沒天平), 那麼就判斷左右是否相等返回即可(也可建乙個全域性變數, 乙個不滿足就可以輸出no了)。 我的程式是把樹建造出來再判斷, 有點冗餘。

#include using

namespace

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....