C# 2003 实现二叉树遍历

C# 2003 实现二叉树遍历

包括:先序、中序、后序,层次遍历。

定义二叉树类TreeNode。

  1. using System;
  2. namespace binaryTreeTest
  3. {
  4.     /// <summary>
  5.     /// Summary description for binaryTree.
  6.     /// </summary>
  7.     
  8.     public class TreeNode
  9.     {
  10.         public string data;
  11.         public TreeNode lChild,rChild;
  12.         public int nodeNum;
  13.         public int height;
  14.         public TreeNode()
  15.         {
  16.         }
  17.         public TreeNode(string d)
  18.         {
  19.             data = d;
  20.             lChild = null;
  21.             rChild = null;
  22.         }
  23.         #region//以层次遍历的次序构造一颗二叉树
  24.         public TreeNode CreateTree() 
  25.         {
  26.             TreeNode[] p = new TreeNode[8];
  27.             //创建节点
  28.             p[0] = new TreeNode("A");
  29.             p[1] = new TreeNode("B");
  30.             p[2] = new TreeNode("C");
  31.             p[3] = new TreeNode("D");
  32.             p[4] = new TreeNode("E");
  33.             p[5] = new TreeNode("F");
  34.             p[6] = new TreeNode("G");
  35.             p[7] = new TreeNode("H");
  36.             //构造二叉树
  37.             p[0].lChild = p[1];
  38.             p[0].rChild = p[2];
  39.             p[1].rChild = p[3];
  40.             p[2].lChild = p[4];
  41.             p[2].rChild = p[5];
  42.             p[3].lChild = p[6];
  43.             p[3].rChild = p[7];
  44.             //返回二叉树根节点
  45.             return p[0];
  46.         }
  47.         #endregion
  48.         #region//先序遍历方法
  49.         public string preOrder(TreeNode p)
  50.         {
  51.             string result = "";
  52.             if ( null != p )
  53.             {
  54.                 result += p.data.ToString();
  55.                 result += preOrder(p.lChild);
  56.                 result += preOrder(p.rChild);
  57.             }
  58.             return result;
  59.         }
  60.         #endregion
  61.         #region//中序遍历方法
  62.         public string inOrder(TreeNode p)
  63.         {
  64.             string result = "";
  65.             if (null != p)
  66.             {
  67.                 result += inOrder(p.lChild);
  68.                 result += p.data.ToString();
  69.                 result += inOrder(p.rChild);
  70.             }
  71.             return result;
  72.         }
  73.         #endregion
  74.         #region//后序遍历方法
  75.         public string postOrder(TreeNode p)
  76.         {
  77.             string result = "";
  78.             if ( null != p)
  79.             {
  80.                 result += postOrder(p.lChild);
  81.                 result += postOrder(p.rChild);
  82.                 result += p.data.ToString();
  83.             }
  84.             return result;
  85.         }
  86.         #endregion
  87.         #region//层次遍历方法
  88.         public string layerOrder(TreeNode p)
  89.         {
  90.             TreeNode[] tempNode = new TreeNode[10];
  91.             int front = -1;
  92.             int rear = 0;
  93.             if (null != p)
  94.             {
  95.                 tempNode[rear] = p;
  96.             }
  97.             string result = "";
  98.             while ( front != rear )
  99.             {
  100.                 front ++;
  101.                 p = tempNode[front];
  102.                 result += p.data.ToString();
  103.                 if ( null != p.lChild )
  104.                 {
  105.                     rear ++;
  106.                     tempNode[rear] = p.lChild;
  107.                 }
  108.                 if ( null != p.rChild )
  109.                 {
  110.                     rear ++;
  111.                     tempNode[rear] = p.rChild;
  112.                 }
  113.             }
  114.             return result;
  115.         }
  116.         #endregion
  117.     }
  118. }

然后在Form中添加一个按钮和四个TextBox,代码如下:

  1. private void btn_Traverse_Click(object sender, System.EventArgs e)
  2.         {
  3.             TreeNode myBinaryTree = new TreeNode();
  4.             myBinaryTree = myBinaryTree.CreateTree();
  5.             string preOrder = myBinaryTree.preOrder(myBinaryTree);
  6.             string inOrder = myBinaryTree.inOrder(myBinaryTree);
  7.             string postOrder = myBinaryTree.postOrder(myBinaryTree);
  8.             string layerOrder = myBinaryTree.layerOrder(myBinaryTree);
  9.             tbx_preOrder.Text = preOrder;
  10.             tbx_inOrder.Text = inOrder;
  11.             tbx_postOrder.Text = postOrder;
  12.             tbx_layerOrder.Text = layerOrder;
  13.         }

程序执行效果如图:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要创建二叉树实现先序遍,可以按照以下步骤进行: 1. 定义二叉树节点类,包括节点值、左子树和右子树三个属性。 ```csharp public class BinaryTreeNode { public int Value { get; set; } public BinaryTreeNode Left { get; set; } public BinaryTreeNode Right { get; set; } } ``` 2. 创建二叉树,可以手动构造一个二叉树,或者读取数据文件等方式创建。 ```csharp BinaryTreeNode root = new BinaryTreeNode { Value = 1, Left = new BinaryTreeNode { Value = 2, Left = new BinaryTreeNode { Value = 4 }, Right = new BinaryTreeNode { Value = 5 } }, Right = new BinaryTreeNode { Value = 3, Left = new BinaryTreeNode { Value = 6 }, Right = new BinaryTreeNode { Value = 7 } } }; ``` 3. 实现先序遍,先访问根节点,再访问左子树,最后访问右子树。 ```csharp public static void PreOrderTraversal(BinaryTreeNode node) { if (node == null) return; Console.Write(node.Value + " "); PreOrderTraversal(node.Left); PreOrderTraversal(node.Right); } ``` 4. 调用先序遍方法,输出遍结果。 ```csharp PreOrderTraversal(root); ``` 完整代码示例: ```csharp using System; public class BinaryTreeNode { public int Value { get; set; } public BinaryTreeNode Left { get; set; } public BinaryTreeNode Right { get; set; } } public class BinaryTree { public static void PreOrderTraversal(BinaryTreeNode node) { if (node == null) return; Console.Write(node.Value + " "); PreOrderTraversal(node.Left); PreOrderTraversal(node.Right); } public static void Main(string[] args) { BinaryTreeNode root = new BinaryTreeNode { Value = 1, Left = new BinaryTreeNode { Value = 2, Left = new BinaryTreeNode { Value = 4 }, Right = new BinaryTreeNode { Value = 5 } }, Right = new BinaryTreeNode { Value = 3, Left = new BinaryTreeNode { Value = 6 }, Right = new BinaryTreeNode { Value = 7 } } }; PreOrderTraversal(root); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值