/// <summary> /// Determines if the tree valid BS the specified root. /// </summary> /// <returns><c>true</c> if is valid BST; otherwise, <c>false</c>.</returns> /// <param name="root">Root Node.</param> public static bool IsValidBST(Node root) { if (root == null) return(true); if (root.Left!=null && MaxValue(root.Left) > root.Value) return(false); if (root.Right!=null && MinValue(root.Right) <= root.Value) return(false); if (!IsValidBST(root.Left) || !IsValidBST(root.Right)) return(false); return(true); }
public Node(int value, Node left, Node right) { Value = value; Left = left; Right = right; }
/// <summary> /// Finds the minimums value in the sub tree. - This is a reccursive fuction /// </summary> /// <returns>Minimum value in the three</returns> /// <param name="node">Node.</param> static int MinValue(Node node) { int subNodeMinValue = node.Left == null ? node.Value: MinValue (node.Left); int minValue = node.Value > subNodeMinValue?node.Value : subNodeMinValue ; return minValue; }
/// <summary> /// Finds the maximum value in the sub tree. This is a reccursive fuction /// </summary> /// <returns>The value.</returns> /// <param name="node">Node.</param> static int MaxValue(Node node) { int subNodeMaxValue =node.Right == null ? node.Value: MaxValue (node.Right); int maxvalue = node.Value > subNodeMaxValue?node.Value : subNodeMaxValue ; return maxvalue; }