![](/img/trans.png)
[英]String representation of Binary Tree, find most distant from the tree root
[英]Binary tree from general tree
我有一個樹結構,其節點具有父ID(無限子節點)。 出於顯示目的,我需要這個樹結構作為二叉樹。 我如何做到這一點是在每個級別節點根據條件分組到一個節點。 選擇節點后,將顯示其子節點。 例:
綠色表示條件為true
且紅色為false
B,C已分組到左側節點,D,E根據其條件在右側。
問題:我正在使用KnockoutJS來顯示我的樹,我需要能夠執行常規樹操作,例如根據其ID獲取節點,插入節點刪除節點。 這是我的結構。 有沒有更好的結構/方式來做到這一點?
var tree = [
{ groupNodeId: "A", childNodes: [
{ nodeId: "A", childGroupNodes: [
{ groupNodeId: "B", condition: true, childNodes: [
{ nodeId: "B", childGroupNodes: []},
{ nodeId: "C", childGroupNodes: []}
]},
{ groupNodeId: "D", condition: false, childNodes: [
{ nodeId: "D", childGroupNodes: []},
{ nodeId: "E", childGroupNodes: []}
]}
]}
]}
];
我不確定你想要什么,但假設:
那么這是你的答案。
function binize(tree) {
var left,right,t,u,
stack=[tree];
while(t=stack.pop()) {
left=[];
right=[];
while(u=t.childNodes.pop()) {
(u.condition?left:right).push(u);
stack.push(u);
}
left.length&&t.childNodes.push({
groupNodeId:left[0].nodeId,
condition:true,
childNodes:left
});
right.length&&t.childNodes.push({
groupNodeId:right[0].nodeId,
condition:false,
childNodes:right
});
}
}
我使用這個數據結構測試它(注意樹是頂級對象,而不是包含它的數組)。
var tree={nodeId:'A',childNodes:[
{nodeId:'B',condition:true,childNodes:[]},
{nodeId:'C',condition:true,childNodes:[]},
{nodeId:'D',condition:false,childNodes:[
{nodeId:'F',condition:false,childNodes:[]},
{nodeIf:'G',condition:false,childNodes:[]}
]},
{nodeId:'E',condition:false,childNodes:[]}
]};
如果我對你的樹有更多了解,那么我可能采取了不同的方法。 例如,如果樹不是很深,那么遞歸地挖掘它可能會更有效(當然也更清晰)。
另外,我之前從未使用過KnockoutJS,也不知道它喜歡什么結構。 我剛剛生成了你指出的結構; 希望這會奏效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.