您的位置:首页 > 理论基础 > 数据结构算法

数据结构:二叉树的建立和遍历(C#实现)

2008-12-12 10:08 796 查看
遍历只做了先序,递归实现的,中序和后序都类似.代码比较简单,就不写注释,直接贴出来了

 

代码:

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();

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息