我有一个类树添加分支树
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)'代码看起来更复杂。请说明你真正想做的事情。 –