public void DeleteByCopying(int value) { TreeNode curr = Root; TreeNode parent = null; while (curr != null) { if (curr.Value == value) break; parent = curr; if (curr.Value > value) curr = curr.Left; else curr = curr.Right; } if (curr == null) return; if (curr.Left == null && curr.Right == null) { if (parent != null) { if (parent.Value > curr.Value) parent.Left = null; else parent.Right = null; } else Root = null; curr = null; } else { if (curr.Left == null) { if (parent != null) { if (parent.Value > curr.Value) parent.Left = curr.Right; else parent.Right = curr.Right; } else parent = curr.Right; curr = null; } else if (curr.Right == null) { if (parent != null) { if (parent.Value > curr.Value) parent.Left = curr.Left; else parent.Right = curr.Left; } else parent = curr.Left; curr = null; } else { //find the rightmost node TreeNode tmp = curr.Left; TreeNode tmpParent = curr; while (tmp.Right != null) { tmpParent = tmp; tmp = tmp.Right; } curr.Value = tmp.Value; if (tmpParent != curr) tmpParent.Right = tmp.Left; else tmpParent.Left = tmp.Left; tmp = null; } } }
public void AddNode(int value) { TreeNode newNode = new TreeNode(value); addNode(Root, newNode); }
private void dfsPreorder(TreeNode node) { if (node == null) return; Console.WriteLine(node.Value); dfsPreorder(node.Left); dfsPreorder(node.Right); }
private void addNode(TreeNode parent, TreeNode child) { if (parent == null) { Root = child; return; } if (parent.Value == child.Value) return; if (parent.Value > child.Value) { if (parent.Left == null) parent.Left = child; else addNode(parent.Left, child); } else { if (parent.Right == null) parent.Right = child; else addNode(parent.Right, child); } }