C#来完成二叉树的搜索、遍历、及查找

二叉树结点类:

public class Node

{

private Node left;

private Node right;

private int value;

public Node(Node left, Node right, int value)

{

this.left = left;

this.right = right;

this.value = value;

}

public Node(int value)

{

this.value = value;

}

public Node getLeftNode() { return left; }

public Node getRightNode() { return right; }

public int getValue() { return value; }

/// <summary>

/// 查找某一节点

/// </summary>

/// <param name="node">根节点</param>

/// <param name="value">要查找的值</param>

/// <returns></returns>

public Node findNode(Node root, int value)

{

if (root == null)

{

return null;

}

if (root.getValue() == value)

{

return root;

}

if (value < root.getValue())

{

findNode(root.getLeftNode(), value);

}

else

{

findNode(root.getRightNode(), value);

}

return null;

}

/// <summary>

/// 先根遍历

/// </summary>

/// <param name="root"></param>

public static void PreOrder(Node root)

{

if (root != null)

{

Console.WriteLine(root.getValue());

PreOrder(root.getLeftNode());

PreOrder(root.getRightNode());

}

}

/// <summary>

/// 后根遍历

/// </summary>

/// <param name="root"></param>

public static void AfterOrder(Node root)

{

if (root != null)

{

AfterOrder(root.getLeftNode());

AfterOrder(root.getRightNode());

Console.WriteLine(root.getValue());

}

}

/// <summary>

/// 中序遍历二叉树

/// </summary>

/// <param name="root"></param>

public static void MidOrder(Node root)

{

if (root != null)

{

MidOrder(root.getLeftNode());

Console.WriteLine(root.getValue());

MidOrder(root.getRightNode());

}

}

public static int leafNodeCount = 0;

public static void count_leafNode(Node root)

{

if (root == null)

{

return;

}

if (root.getLeftNode() == null && root.getRightNode() == null)

{

Console.WriteLine("叶子节点" + leafNodeCount.ToString() + "的值为:" + root.getValue());

leafNodeCount++;

}

else

{

count_leafNode(root.getLeftNode());

count_leafNode(root.getRightNode());

}

}

}

为了简便起见,将遍历等相关方法都写在了该节点中。

以下是主程序调用:

public void showMain()

{

//构建二叉树

Node[] node=new Node[8];

node[4] = new Node(5);

node[5] = new Node(6);

node[6] = new Node(7);

node[3] = new Node(node[6], node[7], 3);

node[2] = new Node(node[4], node[5], 2);

node[1] = new Node(node[3], null, 2);

node[0] = new Node(node[1], node[2], 0);

Console.WriteLine("后根遍历:");

Node.AfterOrder(node[0]);

Console.WriteLine("先根遍历:");

Node.PreOrder(node[0]);

Console.WriteLine("中根遍历:");

Node.MidOrder(node[0]);

Console.WriteLine("共有叶子节点个数为:");

Node.count_leafNode(node[0]);

Console.WriteLine(Node.leafNodeCount);

Console.Read();

}

【转载;来源:http://www.cnblogs.com/hanxianlong】