我真的在為一個問題而苦苦掙扎:我必須找到二叉樹中的所有葉子,然后使用遞回和基本控制元件(沒有專門的功能)將它們加到它們的父親身上。
我嘗試檢查所有節點的子節點以查看它們是否是葉子,然后將它們添加到它們的父親,但似乎我無法正確完成遞回
t = { val: 1, sx: { val: 8, sx: { val: 7, sx: {}, dx: {} }, dx: { val:
1, sx: {}, dx: {} } }, dx: { val: 3, sx: { val: 5, sx: {}, dx: {} }, dx: {} } };
function pota3(t) {
if (t == null) { return }
if (t.dx != null) {
if (t.dx.sx == null && t.dx.dx == null) {
t.val = t.dx.val
delete t.dx
}
}
if (t.sx != null) {
if (t.sx.sx == null && t.sx.dx == null) {
t.val = t.sx.val
delete t.sx
}
}
pota3(t.dx)
pota3(t.sx)
}
pota3(t)
想要的結果:
t = {
val: 1,
sx: { val: 16,sx: {}, dx: {}},
dx: { val: 8, sx: {}, dx:{} }
}
uj5u.com熱心網友回復:
const t = { val: 1, sx: { val: 8, sx: { val: 7, sx: {}, dx: {} }, dx: { val:
1, sx: {}, dx: {} } }, dx: { val: 3, sx: { val: 5, sx: {}, dx: {} }, dx: {} } };
console.log(t);
const addLeafs = (point) => {
if(point.sx.val !== undefined || point.dx.val !== undefined) {
// not a leaf
if(point.sx.val !== undefined) {
// try to add first child value if it's not empty
const adding = addLeafs(point.sx);
if(adding > 0) {
point.val = adding;
point.sx = {};
}
}
if(point.dx.val !== undefined) {
// try to add second child if it's not empty
const adding = addLeafs(point.dx);
if(adding > 0) {
point.val = adding;
point.dx = {};
}
}
// it's not a leaf, so parent should not increase value
return 0;
} else {
// it's a leaf - add it's value to parent
return point.val;
}
}
addLeafs(t);
console.log(t);
uj5u.com熱心網友回復:
您可以定義一些退出條件,例如沒有節點或沒有val屬性和分配val以及所有其他子節點。
const
sum = node => {
if (!node || !('val' in node)) return 0;
return node.total = node.val sum(node.sx) sum(node.dx);
},
t = { val: 1, sx: { val: 8, sx: { val: 7, sx: {}, dx: {} }, dx: { val: 1, sx: {}, dx: {} } }, dx: { val: 3, sx: { val: 5, sx: {}, dx: {} }, dx: {} } };
console.log(t);
sum(t);
console.log(t);
.as-console-wrapper { max-height: 100% !important; top: 0; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/537278.html
上一篇:iOS16.1上的AppCenterXamarin.iOS應用“無法安裝應用”。
下一篇:誰能幫我理解下面代碼的輸出
