C# 2003 实现二叉树遍历
包括:先序、中序、后序,层次遍历。
定义二叉树类TreeNode。
- using System;
- namespace binaryTreeTest
- {
- /// <summary>
- /// Summary description for binaryTree.
- /// </summary>
- public class TreeNode
- {
- public string data;
- public TreeNode lChild,rChild;
- public int nodeNum;
- public int height;
- public TreeNode()
- {
- }
- public TreeNode(string d)
- {
- data = d;
- lChild = null;
- rChild = null;
- }
- #region//以层次遍历的次序构造一颗二叉树
- public TreeNode CreateTree()
- {
- TreeNode[] p = new TreeNode[8];
- //创建节点
- p[0] = new TreeNode("A");
- p[1] = new TreeNode("B");
- p[2] = new TreeNode("C");
- p[3] = new TreeNode("D");
- p[4] = new TreeNode("E");
- p[5] = new TreeNode("F");
- p[6] = new TreeNode("G");
- p[7] = new TreeNode("H");
- //构造二叉树
- p[0].lChild = p[1];
- p[0].rChild = p[2];
- p[1].rChild = p[3];
- p[2].lChild = p[4];
- p[2].rChild = p[5];
- p[3].lChild = p[6];
- p[3].rChild = p[7];
- //返回二叉树根节点
- return p[0];
- }
- #endregion
- #region//先序遍历方法
- public string preOrder(TreeNode p)
- {
- string result = "";
- if ( null != p )
- {
- result += p.data.ToString();
- result += preOrder(p.lChild);
- result += preOrder(p.rChild);
- }
- return result;
- }
- #endregion
- #region//中序遍历方法
- public string inOrder(TreeNode p)
- {
- string result = "";
- if (null != p)
- {
- result += inOrder(p.lChild);
- result += p.data.ToString();
- result += inOrder(p.rChild);
- }
- return result;
- }
- #endregion
- #region//后序遍历方法
- public string postOrder(TreeNode p)
- {
- string result = "";
- if ( null != p)
- {
- result += postOrder(p.lChild);
- result += postOrder(p.rChild);
- result += p.data.ToString();
- }
- return result;
- }
- #endregion
- #region//层次遍历方法
- public string layerOrder(TreeNode p)
- {
- TreeNode[] tempNode = new TreeNode[10];
- int front = -1;
- int rear = 0;
- if (null != p)
- {
- tempNode[rear] = p;
- }
- string result = "";
- while ( front != rear )
- {
- front ++;
- p = tempNode[front];
- result += p.data.ToString();
- if ( null != p.lChild )
- {
- rear ++;
- tempNode[rear] = p.lChild;
- }
- if ( null != p.rChild )
- {
- rear ++;
- tempNode[rear] = p.rChild;
- }
- }
- return result;
- }
- #endregion
- }
- }
然后在Form中添加一个按钮和四个TextBox,代码如下:
- private void btn_Traverse_Click(object sender, System.EventArgs e)
- {
- TreeNode myBinaryTree = new TreeNode();
- myBinaryTree = myBinaryTree.CreateTree();
- string preOrder = myBinaryTree.preOrder(myBinaryTree);
- string inOrder = myBinaryTree.inOrder(myBinaryTree);
- string postOrder = myBinaryTree.postOrder(myBinaryTree);
- string layerOrder = myBinaryTree.layerOrder(myBinaryTree);
- tbx_preOrder.Text = preOrder;
- tbx_inOrder.Text = inOrder;
- tbx_postOrder.Text = postOrder;
- tbx_layerOrder.Text = layerOrder;
- }
程序执行效果如图: