Validate Binary Search Tree -- LeetCode

Given a binary tree, determine if it is a valid binary search tree (BST).

Assume a BST is defined as follows:

  • The left subtree of a node contains only nodes with keys less than the node's key.
  • The right subtree of a node contains only nodes with keys greater than the node's key.
  • Both the left and right subtrees must also be binary search trees.

思路:二叉搜索树如果按照in-order traversal来遍历的话,所有节点会按照从小到大的顺序被遍历。

Pre-order

  1. Display the data part of the root (or current node).
  2. Traverse the left subtree by recursively calling the pre-order function.
  3. Traverse the right subtree by recursively calling the pre-order function.

In-order

  1. Traverse the left subtree by recursively calling the in-order function.
  2. Display the data part of the root (or current node).
  3. Traverse the right subtree by recursively calling the in-order function.

In a BST, in-order traversal retrieves data in sorted order.

Post-order

  1. Traverse the left subtree by recursively calling the post-order function.
  2. Traverse the right subtree by recursively calling the post-order function.
  3. Display the data part of the root (or current node).
 1 class Solution {
 2 public:
 3     bool validate(TreeNode* root, TreeNode* &pre)
 4     {
 5         if (root == NULL) return true;
 6         if (!validate(root->left, pre)) return false;
 7         if (pre != NULL && pre->val >= root->val) return false;
 8         pre = root;
 9         return validate(root->right, pre);
10     }
11     bool isValidBST(TreeNode* root) {
12         TreeNode* pre = NULL;
13         return validate(root, pre);
14     }
15 };

代码中,我用了一个全局指针pre来记录in-order traversal过程中的上一个节点。如果上一个节点的值比当前节点的值要大或者相等,则不是BST。

posted @ 2016-01-27 06:36  fenshen371  阅读(145)  评论(0编辑  收藏  举报