二叉樹3(恢復二叉樹)

2021-10-03 14:36:17 字數 1481 閱讀 2343

給一顆帶權(權值各不相同,都是小於10000的正整數)的二叉樹的中序和後序遍歷序列,找乙個葉子使得它到根的路徑上的權值盡可能小,如果有多解,取葉子權值小的。輸入中第一行為中序遍歷,第二行為後序遍歷。

例如輸入:

3 2 1 4 5 7 6

3 1 2 5 6 7 4

輸出輸入:

7 8 11 3 5 16 12 18

8 3 11 7 16 18 12 5

輸出:

#include"

iostream

"using

namespace

std;

typedef

intelement;

element minweight = 20000

;element minleaf;

class

tree

void usezhcreate(tree* &t,element *z,element *h,int

len)

else

}int rlen = len - llen - 1; //

右子樹長度

element *zl = new

element[llen];

element *zr = new

element[rlen];

element *hl = new

element[llen];

element *hr = new

element[rlen];

//核心拆分

for(i = 0;i < llen;i++)

for(i = 0;i < rlen;i++)

t = new tree(h[len - 1

]);

//長度大於0 就繼續建立樹

if(llen > 0

)

if(rlen > 0

)

delete

zl;delete

zr;delete

hl;delete

hr;}

}void minpath(element w = 0

)

return

; }

left->minpath(w);

right->minpath(w);}}

};int

main()

}for(i = 0;i < 10000;i++)

}t->usezhcreate(t,z,h,i + 1

); t->minpath();

cout

return0;

}/*7 8 11 3 5 16 12 18

8 3 11 7 16 18 12 5

3 2 1 4 5 7 6

3 1 2 5 6 7 4

*/

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...

樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹

目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...

恢復二叉搜尋樹 二叉樹

給你二叉搜尋樹的根節點 root 該樹中的兩個節點被錯誤地交換。請在不改變其結構的情況下,恢復這棵樹。高階 使用 o n 空間複雜度的解法很容易實現。你能想出乙個只使用常數空間的解決方案嗎?示例 1 輸入 root 1,3,null,null,2 輸出 3,1,null,null,2 解釋 3 不能...