protected IBinaryNode <T> DeleteNode(IBinaryNode <T> node, T data) { try { if (node == null) { return(node); } if (Comparer.Compare(data, node.GetData()) < 0) { node.SetLeftNode(DeleteNode(node.GetLeftNode(), data)); } else if (Comparer.Compare(data, node.GetData()) > 0) { node.SetRightNode(DeleteNode(node.GetRightNode(), data)); } else { // node with no leaf nodes if (node.GetLeftNode() == null && node.GetRightNode() == null) { return(null); } else if (node.GetLeftNode() == null) { // node with one node (no left node) return(node.GetRightNode()); } else if (node.GetRightNode() == null) { // node with one node (no right node) return(node.GetLeftNode()); } else { // nodes with two nodes // search for min number in right sub tree T minValues = MinValue(node.GetRightNode()); node.SetData(minValues); node.SetRightNode(DeleteNode(node.GetRightNode(), minValues)); } } return(node); } catch (NullReferenceException ex) { throw ex; } }
protected static IBinaryNode <T> DeleteTree(IBinaryNode <T> root) { if (root != null) { root.SetLeftNode(DeleteTree(root.GetLeftNode())); root.SetRightNode(DeleteTree(root.GetLeftNode())); root = null; return(null); } return(null); }
protected static IBinaryNode <T> DeleteTree(IBinaryNode <T> root) { try { if (root != null) { root.SetLeftNode(DeleteTree(root.GetLeftNode())); root.SetRightNode(DeleteTree(root.GetRightNode())); root = null; return(null); } return(null); } catch (NullReferenceException nre) { return(root); } }