LeetCode 面試題 04.05. 合法二叉搜索樹

LeetCode 面試題 04.05. 合法二叉搜索樹

原題鏈接

題目描述
實現一個函數,檢查一棵二叉樹是否爲二叉搜索樹。

二叉搜索樹的定義:
針對每個節點來說

  1. 左子樹的所有節點的值比本身要小(等於也不行)
  2. 右子樹的所有節點的值比本身要打(等於也不行)

示例 1:

輸入:
    2
   / \
  1   3
輸出: true

示例 2:

輸入:
    5
   / \
  1   4
     / \
    3   6
輸出: false
解釋: 輸入爲: [5,1,4,null,null,3,6]。
     根節點的值爲 5 ,但是其右子節點值爲 4

解題思路

  1. 因爲涉及到非直連節點間的比較, 所以先將樹變成數組, 然後判斷是否有序就行了
  2. 採用中序遍歷

AC代碼

class Solution {
public:
	vector<int>s;
	void dfs(TreeNode* root) {
	//中序遍歷
		if (root) {
			dfs(root->left);
			s.push_back(root->val);
			dfs(root->right);
		}

	}
	bool isValidBST(TreeNode* root) {
		dfs(root);
		for (int i = 1; i < s.size(); i++) 
		//判斷是否遞增
			if (s[i] <= s[i - 1])return false;
		return true;
	}
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章