給一顆帶權(權值各不相同,都是小於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 不能...