檢查是否是BST 牛客網 程式設計師面試金典 C++ java Python
阿新 • • 發佈:2018-12-10
檢查是否是BST 牛客網 程式設計師面試金典 C++ java Python
- 題目描述
- 請實現一個函式,檢查一棵二叉樹是否為二叉查詢樹。
- 給定樹的根結點指標TreeNode* root,請返回一個bool,代表該樹是否為二叉查詢樹。
C++
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Checker { public: //run:4ms memory:472k bool checkBST(TreeNode* root) { if (NULL == root) return true; if (NULL != root->left){ if (root->left->val > root->val) return false; if (root->left->right && (root->left->right->val > root->val)) return false; } if (NULL != root->right){ if (root->right->val < root->val) return false; if (root->right->left && (root->right->left->val < root->val)) return false; } return checkBST(root->left) && checkBST(root->right); } };
java
import java.util.*; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } }*/ public class Checker { // run: 42ms memory:10128k public boolean checkBST(TreeNode root){ if (null == root) return true; if (root.left != null){ if (root.left.val > root.val) return false; if (root.left.right !=null && root.left.right.val > root.val) return false; } if (root.right != null){ if(root.right.val < root.val) return false; if(root.right.left != null && root.right.left.val < root.val) return false; } return checkBST(root.left) && checkBST(root.right); } }
Python
# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Checker: #run:48ms memory:5852k def checkBST(self, root): if None == root: return True if None != root.left: if root.left.val > root.val: return False if None != root.left.right and root.left.right.val > root.val: return False if None != root.right: if root.right.val <root.val: return False if None != root.right.left and root.right.left.val < root.val: return False return self.checkBST(root.left) and self.checkBST(root.right)