private string TraversePostOrder(BinaryLeaf parent) { if (parent != null) { //Debug.Log(parent.Data + " "); return(string.Format("{0}, {1}, {2}", TraversePostOrder(parent.LeftNode), TraversePostOrder(parent.RightNode), parent.Data.ToString())); } else { return(string.Empty); } }
private BinaryLeaf Remove(BinaryLeaf parent, int key) { if (parent == null) { return(parent); } if (key < parent.Data) { parent.LeftNode = Remove(parent.LeftNode, key); } else if (key > parent.Data) { parent.RightNode = Remove(parent.RightNode, key); } // if value is same as parent's value, then this is the node to be deleted else { // node with only one child or no child if (parent.LeftNode == null) { return(parent.RightNode); } else if (parent.RightNode == null) { return(parent.LeftNode); } // node with two children: Get the inorder successor (smallest in the right subtree) int minv = parent.RightNode.Data; while (parent.RightNode.LeftNode != null) { minv = parent.RightNode.LeftNode.Data; parent.RightNode = parent.RightNode.LeftNode; } parent.Data = minv; // Delete the inorder successor parent.RightNode = Remove(parent.RightNode, parent.Data); } return(parent); }
private BinaryLeaf Add(int value, BinaryLeaf root) { if (root == null) { root = new BinaryLeaf(); root.Data = value; } else if (value < root.Data) { root.LeftNode = Add(value, root.LeftNode); } else { root.RightNode = Add(value, root.RightNode); } return(root); }
public bool Insert(int value) { BinaryLeaf before = null, after = this.Root; while (after != null) { before = after; if (value < after.Data) //Is new node in left tree? { after = after.LeftNode; } else if (value > after.Data) //Is new node in right tree? { after = after.RightNode; } else { //Exist same value return(false); } } BinaryLeaf newNode = new BinaryLeaf(); newNode.Data = value; if (this.Root == null)//Tree ise empty { this.Root = newNode; } else { if (value < before.Data) { before.LeftNode = newNode; } else { before.RightNode = newNode; } } return(true); }
private BinaryLeaf Find(int value, BinaryLeaf parent) { if (parent != null) { if (value == parent.Data) { return(parent); } if (value < parent.Data) { return(Find(value, parent.LeftNode)); } else { return(Find(value, parent.RightNode)); } } return(null); }
private int GetTreeDepth(BinaryLeaf parent) { return(parent == null ? 0 : System.Math.Max(GetTreeDepth(parent.LeftNode), GetTreeDepth(parent.RightNode)) + 1); }