如何从控制台中读取二叉树,以便能够锻炼其节点
本文关键字:节点 控制台 二叉树 读取 | 更新日期: 2023-09-27 18:16:48
我需要继续处理二叉树的节点,但我不确定如何将其作为输入传递。假设我有一个树:
11
12 13
14 15 16
17 18 19 20
然后我有一个通用类Node<T>
public class Node<T>
{
public T Value { get; set; }
public List<Node<T>> Children { get; set; }
public bool HasChild { get; set; }
public bool HasParent { get; set; }
public Node(T value)
{
this.Value = value;
this.Children = new List<Node<T>>();
}
}
我应该将每个节点添加到子节点列表中,但是以什么顺序,这样我就保持了树的层次结构?
给用户一个选择,首先选择要输入的订单,如Preorder/Inorder/Postorder。然后相应地处理输入。
树的一种表示形式是一系列对;每个值及其父值(null
为根)。您的树可能表示为:
你可以在第一行输入两个整数,说'n'是节点的数量,'m'是弧的数量。然后用'n'行表示节点的标识符,然后用'm'行表示圆弧。
当您解析标识符时,您可以创建您的Node对象,然后当您传递弧时,您可以正确地添加子对象。
你的图形会是这样的:
10 12
11
12
13
14
15
16
17
18
19
20
11 12
11 13
12 14
12 15
13 15
13 16
14 17
14 18
15 18
15 19
16 19
16 20
这样你就忘记了弧和给定的顺序。您可以稍后识别头部,因为它将是唯一没有父节点的节点。
像这样
public static void Main()
{
Node root = new Node(50);
BinaryTree BT = new BinaryTree(root);
Node left = new Node(17);
Node right = new Node(76);
root.left = left;
root.right = right;
Node lleft = new Node(9);
Node lright = new Node(23);
Node rleft = new Node(54);
root.left.left = lleft;
root.left.right = lright;
root.right.left = rleft;
Node llright = new Node(14);
Node llrleft = new Node(12);
root.left.left.right = llright;
root.left.left.right.left = llrleft;
Node lrright = new Node(19);
root.left.right.left = lrright;
Node rlright = new Node(72);
Node rlrleft = new Node(67);
root.right.left.right = rlright;
root.right.left.right.left = rlrleft;
}