遍历只做了先序,递归实现的,中序和后序都类似.代码比较简单,就不写注释,直接贴出来了
代码:
TreeNode:结点类
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace 二叉树的建立和遍历
- {
- class TreeNode
- {
- public char data;
- public TreeNode left, right;
- public TreeNode(char c,TreeNode l,TreeNode r)
- {
- data = c;
- left = l;
- right = r;
- }
- public TreeNode() { left = right = null; }
- }
- }
Tree:树类
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace 二叉树的建立和遍历
- {
- class Tree
- {
- public TreeNode root;
- Stack<TreeNode> stack = new Stack<TreeNode>();
- public void CreateTree(String description)
- {
- bool left=true;
- char[] descriptionarray = description.ToCharArray();
- root = new TreeNode();
- root.data = descriptionarray[0];
- TreeNode temp=root;
- for (int i = 1; i <=descriptionarray.Length-1; i++)
- {
- if (descriptionarray[i] == '(')
- {
- left = true; stack.Push(temp);
- }
- else if (descriptionarray[i] == ',')
- {
- left = false;
- }
- else if (descriptionarray[i] == ')') { stack.Pop(); }
- else
- {
- temp = new TreeNode();
- temp.data = descriptionarray[i];
- if (left == true)
- {
- stack.Peek().left = temp;
- }
- else
- {
- stack.Peek().right = temp;
- }
- }
- }
- }
- public void PreOrder(TreeNode t,String sign)
- {
- if (t!= null)
- {
- Console.WriteLine(sign+t.data);
- sign += sign;
- if (t.left != null)
- {
- PreOrder(t.left,sign);
- }
- if (t.right != null)
- {
- PreOrder(t.right,sign);
- }
- }
- }
- }
- }
Program:调用者
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace 二叉树的建立和遍历
- {
- class Program
- {
- static void Main(string[] args)
- {
- //TreeNode t=null;
- Tree tree = new Tree();
- Console.WriteLine("请输入用字符串表示的二叉树");
- string input =Console.ReadLine();
- tree.CreateTree(input);
- Console.WriteLine("遍历");
- tree.PreOrder(tree.root,"--");
- Console.Read();
- }
- }
- }