假设data = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' };这个是我们要存储的数据,求二叉树的先序遍历,中序遍历和后序遍历。c#
时间: 2024-01-16 11:03:41 浏览: 25
以下是C#中二叉树的先序遍历,中序遍历和后序遍历的实现,假设data = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' }:
```csharp
using System;
public class TreeNode
{
public char val;
public TreeNode left;
public TreeNode right;
public TreeNode(char x) { val = x; }
}
public class BinaryTree
{
public TreeNode root;
public BinaryTree(char[] data)
{
root = BuildTree(data, 0, data.Length - 1);
}
private TreeNode BuildTree(char[] data, int start, int end)
{
if (start > end)
{
return null;
}
int mid = (start + end) / 2;
TreeNode node = new TreeNode(data[mid]);
node.left = BuildTree(data, start, mid - 1);
node.right = BuildTree(data, mid + 1, end);
return node;
}
public void PreorderTraversal(TreeNode node)
{
if (node == null)
{
return;
}
Console.Write(node.val + " ");
PreorderTraversal(node.left);
PreorderTraversal(node.right);
}
public void InorderTraversal(TreeNode node)
{
if (node == null)
{
return;
}
InorderTraversal(node.left);
Console.Write(node.val + " ");
InorderTraversal(node.right);
}
public void PostorderTraversal(TreeNode node)
{
if (node == null)
{
return;
}
PostorderTraversal(node.left);
PostorderTraversal(node.right);
Console.Write(node.val + " ");
}
}
public class Program
{
public static void Main()
{
char[] data = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' };
BinaryTree tree = new BinaryTree(data);
Console.WriteLine("先序遍历:");
tree.PreorderTraversal(tree.root);
Console.WriteLine();
Console.WriteLine("中序遍历:");
tree.InorderTraversal(tree.root);
Console.WriteLine();
Console.WriteLine("后序遍历:");
tree.PostorderTraversal(tree.root);
Console.WriteLine();
}
}
```