Beispiel #1
0
 public ThreadBinaryTree()
 {
     root = null;
 }
Beispiel #2
0
        public void AddNodeToTree(int value)
        {
            ThreadNode newnode = new ThreadNode(value);
            ThreadNode current;
            ThreadNode parent;
            ThreadNode previous = new ThreadNode(value);
            int        pos;

            //设置线索二叉树开头节点
            if (root == null)
            {
                root         = newnode;
                root.lchild  = root;
                root.rchild  = null;
                root.lthread = 0;
                root.rthread = 1;
                return;
            }

            //设置开头节点所指的节点
            current = root.rchild;
            if (current == null)
            {
                root.rchild    = newnode;
                newnode.rchild = root;
                newnode.lchild = root;
                return;
            }
            parent = root;
            pos    = 0;
            while (current != null)
            {
                if (current.data > value)
                {
                    if (pos != -1)
                    {
                        pos      = -1;
                        previous = parent;
                    }
                    parent = current;
                    if (current.lthread == 1)
                    {
                        current = current.lchild;
                    }
                    else
                    {
                        current = null;
                    }
                }
                else
                {
                    if (pos != 1)
                    {
                        pos      = 1;
                        previous = parent;
                    }
                    parent = current;
                    if (current.rthread == 1)
                    {
                        current = current.rchild;
                    }
                    else
                    {
                        current = null;
                    }
                }
            }
            if (parent.data > value)
            {
                parent.lthread = 1;
                parent.lchild  = newnode;
                newnode.lchild = previous;
                newnode.rchild = parent;
            }
            else
            {
                parent.rthread = 1;
                parent.rchild  = newnode;
                newnode.rchild = previous;
                newnode.lchild = parent;
            }
            return;
        }
Beispiel #3
0
 public ThreadNode(int data, ThreadNode lchild, ThreadNode rchild)
 {
     this.data   = data;
     this.lchild = lchild;
     this.rchild = rchild;
 }