我有一個類樹添加分支樹
public class Tree
{
private int tree_height;
private int tree_width;
private int nodes_count;
private List<Node> tree_nodes;
}
我想創建一個方法來一個分支添加到樹 這裏是我的代碼:
public void AddBranch(Tree branch, int node_num)
{
if (nodes_count >= node_num && node_num > 0)
{
int last_el_ordering = nodes_count,
first_parent_height = tree_nodes[node_num - 1].Height,
first_parent_ordering = tree_nodes[node_num - 1].Ordering;
tree_nodes.Add(new Node(branch.Tree_nodes.First().State, last_el_ordering + 1, first_parent_ordering, first_parent_height + 1));
foreach (Node el in branch.Tree_nodes.Skip(1))
tree_nodes.Add(new Node(el.State, el.Ordering + last_el_ordering, el.Parent + last_el_ordering, el.Height + first_parent_height));
tree_nodes = tree_nodes.OrderBy(match => match.Height).ToList();
int i = 1;
foreach (Node el in tree_nodes)
{
List<Node> temp = tree_nodes.ToList().FindAll(match => match.Parent == el.Ordering).ToList();
el.Ordering = i++;
if (temp.Count() > 0)
foreach (Node el2 in temp)
el2.Parent = el.Ordering;
}
}
}
輸入
Tree testing_tree1 = new Tree(new Node("start"));
List<string> temp = new List<string> { "a", "b", "c" };
foreach(string el in temp)
testing_tree1.AddBranch(new Tree(new Node(el)),1);
for (int i = 0; i < 3; i++)
testing_tree1.AddBranch(new Tree(new Node("false")), i+2);
Tree testing_tree2 = new Tree(new Node("d"));
testing_tree2.AddBranch(new Tree(new Node("false")), 1);
testing_tree1.AddBranch(testing_tree2, 1);
testing_tree1.DisplayTree();
Console.Read();
輸出結果 輸出 樹深度: 3樹寬:4節點數:9;
- 節點號:1,節點父節點:-1,節點高度:1,節點值:start;
- 節點號:2,節點父節點:1,節點高度:2,節點值:a;
- 節點號:3,節點父節點:1,節點高度:2,節點值:b;
- 節點號:4,節點父節點:1,節點高度:2,節點值:c;
- 節點號:5,節點父節點:1,節點高度:2,節點值:d;
- 節點號:6,節點父節點:2,節點高度:3,節點值:假;
- 節點號:7,節點父節點:3,節點高度:3,節點值:假;
- 節點號:8,節點父節點:4,節點高度:3,節點值:假;
- 節點號:9,節點父節點:8,節點高度:3,節點值:假;
正如你可以看到最後一個節點有錯誤的父節點,任何線索?
這似乎是你想在你的調試器中跟蹤的東西。 – adamdc78
您發佈了什麼'DisplayTree'輸出,但不顯示'DisplayTree'的代碼。你有什麼問題? –
簡單的'tree_nodes.Add(branch)'代碼看起來更復雜。請說明你真正想做的事情。 –