判斷二叉樹是否爲平衡二叉樹(BST)

給定一個二叉樹,判斷此樹是否爲平衡二叉樹。平衡二叉樹,根節點的值小於右孩子節點的值,且大於左孩子節點的值。

遞歸方法:

bool isValidBST(TreeNode *root, TreeNode *&pre)
{
	if (root == NULL)
		return true;
	if (!isValidBST(root->left, pre))
		return false;
	if (pre != NULL && pre->val >= root->val)
		return false;
	pre = root;
	return isValidBST(root->right, pre);
}

bool isValidBST(TreeNode* root)
{
	TreeNode *pre = NULL;
	return isValidBST(root, pre);
}
非遞歸方法:中序遍歷思想
bool isValidBST(TreeNode* root)
{
	stack<TreeNode *> s;
	TreeNode *pointer = root;
	long long val = LLONG_MIN;
	while (!s.empty() || pointer)
	{
		if (pointer)
		{
			s.push(pointer);
			pointer = pointer->left;
		}
		else
		{
			pointer = s.top();
			s.pop();
			if (val >= pointer->val)
				return false;
			else
				val = pointer->val;
			pointer = pointer->right;
		}
	}
	return true;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章