コード例 #1
0
        public bool Add(int data)
        {
            Node toAdd = new Node ();
            toAdd.NodeValue = data;
            toAdd.lesserSubNode = null;
            toAdd.greaterSubNode = null;

            levelCalculator = 0;

            if (root == null) {
                root = toAdd;
                current_Node = toAdd;
                return true;
            }

            current_Node = root;
            while (true) {
                if (current_Node.NodeValue == data) {
                    return false;

                } else if (current_Node.NodeValue > data) {
                    levelCalculator++;
                    if (current_Node.lesserSubNode == null) {
                        current_Node.lesserSubNode = toAdd;
                        current_Node = toAdd;
                        if (level < levelCalculator)
                            level = levelCalculator;
                        return true;

                    } else {
                        current_Node = current_Node.lesserSubNode;
                    }
                } else {
                    levelCalculator++;
                    if (current_Node.greaterSubNode == null) {
                        current_Node.greaterSubNode = toAdd;
                        current_Node = toAdd;
                        if (level < levelCalculator)
                            level = levelCalculator;
                        return true;

                    } else {
                        current_Node = current_Node.greaterSubNode;
                    }
                }
            }
        }
コード例 #2
0
 public Node(int data)
 {
     NodeValue = data;
     greaterSubNode = null;
     lesserSubNode = null;
 }
コード例 #3
0
 public Node(Node theinputnode)
 {
     greaterSubNode = theinputnode.greaterSubNode;
     lesserSubNode = theinputnode.lesserSubNode;
     NodeValue = theinputnode.NodeValue;
 }
コード例 #4
0
 public void Reset()
 {
     currentNode = rootNode;
 }
コード例 #5
0
 public BSTEnumerator(Node head)
 {
     rootNode = head;
     currentNode = head;
 }
コード例 #6
0
        private Node DeleteKey(Node theRootNode, int Key)
        {
            if (theRootNode == null)
                return theRootNode;

            if (Key < theRootNode.NodeValue) {

                theRootNode.lesserSubNode = DeleteKey (theRootNode.lesserSubNode, Key);

            } else if (Key > theRootNode.NodeValue) {

                theRootNode.greaterSubNode = DeleteKey (theRootNode.greaterSubNode, Key);

            } else {

                if (theRootNode.lesserSubNode == null) {
                    return theRootNode.greaterSubNode;
                } else if (theRootNode.greaterSubNode == null) {
                    return theRootNode.lesserSubNode;
                }

                // node with two children: smallest in the right subtree
                Node temp = new Node (theRootNode.greaterSubNode);
                while (true) {
                    if (temp.lesserSubNode == null)
                        break;
                    temp = temp.lesserSubNode;
                }

                // Copy the inorder successor's content to this node

                theRootNode.NodeValue = temp.NodeValue;

                // Delete the inorder successor
                theRootNode.greaterSubNode = DeleteKey (theRootNode.greaterSubNode, temp.NodeValue);
            }
            return theRootNode;
        }
コード例 #7
0
        public bool Search(int searchValue)
        {
            bool searchflag = false;
            current_Node = root;

            while (true) {
                if (current_Node.NodeValue == searchValue) {
                    searchflag = true;
                    break;
                } else if (current_Node.NodeValue > searchValue) {
                    if (current_Node.lesserSubNode == null) {
                        searchflag = false;
                        break;
                    } else {
                        current_Node = current_Node.lesserSubNode;
                    }
                } else if (current_Node.NodeValue < searchValue) {
                    if (current_Node.greaterSubNode == null) {
                        searchflag = false;
                        break;
                    } else {
                        current_Node = current_Node.greaterSubNode;
                    }
                }
            }
            return searchflag;
        }
コード例 #8
0
 public void Delete(int deleteValue)
 {
     root = DeleteKey (root, deleteValue);
 }