判断二叉树是否为平衡二叉树(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;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值