.net 数据结构与算法基础:二叉树

来源:互联网 发布:淘宝直播间申请 编辑:程序博客网 时间:2024/05/17 03:27

二叉树简介


  在计算机科学中,二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树二叉堆或是二叉排序树。二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2的 i -1次方个结点;深度为k的二叉树至多有2^(k) -1个结点;对任何一棵二叉树T,如果其终端结点数(即叶子结点数)为n0,度为2的结点数为n2,则n0 = n2 + 1。


二叉查找树


二叉排序树(Binary Sort Tree)又称二叉查找树。 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树;


C#添加二叉查找树


算法步骤:


1)创建根节点,并将根节点设为空。
2)判断当前插入节点,若此时根节点为空将其设为根节点,否则执行第三步。
3)将根节点设置为当前点,判断节点与当前点大小关系,若小于当前点,则将根节点左节点设为当前点,若当前点为空,则将待插入节点插入当前点,否则执行第四步。若大于当前点,则将根节点右节点设为当前点,若当前点为空,则将待插入节点插入当前点,否则执行第四步。
4)进行新一轮循环查找。
5)当找到插入节点位置(父节点的左节点或是右节点为空),退出循环。

算法程序:


       public void Insert(int i)
        {
            Node newNode=new Node();
            newNode.Data=i;
            if (root == null)  //判断根节点是否为空
            {
                root = newNode;
            }
            else
            {
                Node current = root;
                Node parent;
                while (true)  //循环查找插入位置
                {
                    parent = current;
                    if (i < current.Data) //小于当前节点
                    {
                        current = current.Left; //将左节点作为当前节点
                        if (current == null)
                        {
                            parent.Left = newNode;  //获得插入位置
                            break;  //退出循环
                        }
                    }
                    else
                    {
                        current = current.Right;
                        if (current == null)
                        {
                            parent.Right = newNode;
                            break;
                        }
                    }
                }
            }
        }


二叉树遍历


中序遍历:


        protected void InOrde(Node node)
        {
            InOrde(node.Left);
            node.DispalyNode();
            InOrde(node.Right);
        }


后序遍历:


       public void PostOrder(Node node)
        {
            if (node != null)
            {
                InOrder(node.Left);
                InOrder(node.Right);
                node.DispalyNode();
            }
        }


先序遍历:


        public void PreOrder(Node node)
        {
            if (node != null)
            {
                node.DispalyNode();
                InOrder(node.Left);
                InOrder(node.Right);
            }
        }


程序结果:


     

代码下载:http://download.csdn.net/detail/xiang__jiangsu/4804787
原创粉丝点击