Ejemplo n.º 1
0
 public Node(int data, Node left, Node right, Node parent)
 {
     this.data = data;
     this.left = left;
     this.right = right;
     this.parent = parent;
 }
Ejemplo n.º 2
0
        public Node buildtree(int[] arr)
        {
            foreach (int i in arr)
                root = insert(root, i, null);

            return root;
        }
Ejemplo n.º 3
0
        static Node FindKthClosestSucc(Node node, int k, List<int> closest)
        {
            if (node == null)
                return null;

            if(k == 0)
                return node;

            if (node.right != null)
            {
                Node min = minNode(node.right);
                if (min != null)
                    closest.Add(min.data);
                return FindKthClosestSucc(min, k - 1, closest);
            }
            else
            {
                Node parent = node.parent;
                while (parent != null && parent.right == node)
                {
                    node = parent;
                    parent = node.parent;
                }
                if (parent != null)
                    closest.Add(parent.data);
                return FindKthClosestSucc(parent, k - 1, closest);
            }
        }
Ejemplo n.º 4
0
        static Node FindKthClosestPred(Node node, int k, List<int> closest)
        {
            if (node == null)
                return null;

            if (k == 0)
                return node;

            if (node.left != null)
            {
                Node max = maxNode(node.left);
                if (max != null)
                    closest.Add(max.data);
                return FindKthClosestPred(max, k - 1, closest);
            }
            else
            {
                Node parent = node.parent;
                while (parent != null && parent.left == node)
                {
                    node = parent;
                    parent = node.parent;
                }
                if (parent != null)
                    closest.Add(parent.data);
                return FindKthClosestPred(parent, k - 1, closest);
            }
        }
Ejemplo n.º 5
0
 public static void KthClosest(Node node, int data, int k)
 {
     Node cur = findNode(node, data);
     List<int> closest = new List<int>();
     Node KthSucc = FindKthClosestSucc(cur, k, closest);
     Node KthPred = FindKthClosestPred(cur, k, closest);
     Console.WriteLine("K succs and preds: ");
     foreach (int i in closest)
         Console.Write("{0} ", i);
 }
Ejemplo n.º 6
0
 public Node insert(Node node, int data, Node parent)
 {
     if (node == null)
         return new Node(data, parent);
     else {
         if (node.data < data)
             node.right = insert(node.right, data, node);
         else
             node.left = insert(node.left, data, node);
         return node;
     }
 }
Ejemplo n.º 7
0
 public Node(int data, Node parent)
     : this(data, null, null, parent)
 {
 }
Ejemplo n.º 8
0
        static Node findNode(Node node, int data)
        {
            if (node == null)
                return null;
            if (node.data == data)
                return node;

            if (node.data < data)
                return findNode(node.right, data);
            else
                return findNode(node.left, data);
        }
Ejemplo n.º 9
0
 static Node minNode(Node node)
 {
     while (node.left != null)
         node = node.left;
     return node;
 }
Ejemplo n.º 10
0
 static Node maxNode(Node node)
 {
     while (node.right != null)
         node = node.right;
     return node;
 }