博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

树1——构造二叉树

Posted on 2010-10-27 21:49  猴王无敌  阅读(300)  评论(0)    收藏  举报

【原理】

每个节点的儿子包括左儿子和右儿子

构造二叉树时,要插入的节点比当前节点大就往右儿子插入,比当前节点小就往左儿子插入。

【实现】

每个节点

 

    public class CTreeNode
    {
        #region Fields

        private int m_iData;
        public int Data
        {
            get { return m_iData; }
            set { m_iData = value; }
        }

        private CTreeNode m_oLeftTreeNode;
        public CTreeNode LeftTreeNode
        {
            get { return m_oLeftTreeNode; }
            set { m_oLeftTreeNode = value; }
        }

        private CTreeNode m_oRightTreeNode;
        public CTreeNode RightTreeNode
        {
            get { return m_oRightTreeNode; }
            set { m_oRightTreeNode = value; }
        }

        #endregion
    }

二叉树

 

 

    public class CBSTree
    {
        #region Fields

        private CTreeNode m_oRootTreeNode;
        public CTreeNode RootTreeNode
        {
            get { return m_oRootTreeNode; }
            set { m_oRootTreeNode = value; }
        }

        #endregion

        #region Construction

        public CBSTree()
        {
            this.m_oRootTreeNode = null;
        }

        #endregion
    }

插入操作

    public class CBSTree
    {
        #region Insert

        public void Insert(int iData)
        {
            //1.如果根节点为空,就添加根节点
            if (null == this.m_oRootTreeNode)
            {
                this.m_oRootTreeNode = new CTreeNode()
                {
                    Data = iData
                };
            }
            //2.如果根节点不为空,就添加左右子节点
            else
            {
                //3.如果iData数据小于当前节点,则加到当前节点的左儿子
                if (iData < this.m_oRootTreeNode.Data)
                {
                    //3.1.如果当前节点没左儿子,就加左儿子over
                    if (null == this.m_oRootTreeNode.LeftTreeNode)
                    {
                        this.m_oRootTreeNode.LeftTreeNode = new CTreeNode()
                        {
                            Data = iData
                        };
                    }
                    //3.2.如果当前节点有左儿子,左儿子继续玩
                    else
                    {
                        this.m_oRootTreeNode.LeftTreeNode._Insert(iData);
                    }
                }
                //4.如果iData数据大于当前节点,则加到当前节点的右儿子
                else
                {
                    //4.1.如果当前节点没右儿子,就加右儿子over
                    if (null == this.m_oRootTreeNode.RightTreeNode)
                    {
                        this.m_oRootTreeNode.RightTreeNode = new CTreeNode()
                        {
                            Data = iData
                        };
                    }
                    //4.2.如果当前节点有右儿子,右儿子继续玩
                    else
                    {
                        this.m_oRootTreeNode.RightTreeNode._Insert(iData);
                    }
                }
            }
        }

        #endregion
    }

    public class CTreeNode
    {
        #region Insert

        internal void _Insert(int iData)
        {
            //3.如果iData数据小于当前节点,则加到当前节点的左儿子
            if (iData < this.m_iData)
            {
                //3.1.如果当前节点没左儿子,就加左儿子over
                if (null == this.m_oLeftTreeNode)
                {
                    this.m_oLeftTreeNode = new CTreeNode()
                    {
                        Data = iData
                    };
                }
                //3.2.如果当前节点有左儿子,左儿子继续玩
                else
                {
                    this.m_oLeftTreeNode._Insert(iData);
                }
            }
            //4.如果iData数据大于当前节点,则加到当前节点的右儿子
            else
            {
                //4.1.如果当前节点没右儿子,就加右儿子over
                if (null == this.m_oRightTreeNode)
                {
                    this.m_oRightTreeNode = new CTreeNode()
                    {
                        Data = iData
                    };
                }
                //4.2.如果当前节点有右儿子,右儿子继续玩
                else
                {
                    this.m_oRightTreeNode._Insert(iData);
                }
            }
        }

        #endregion
    }