-
很简单的一道算法题。对单个节点,判断其是否存在左右子树,都存在,测比较两个值。否则递归返回两个子树的与结果。单独存在一个,单独运算即可。
-
#include
using namespace std;
struct TreeNode
{
int val;
TreeNode lChild;
TreeNode rChild;
TreeNode(int val, TreeNodel = nullptr, TreeNoder = nullptr)
{
this->val = val;
this->lChild = l;
this->rChild = r;
}
};
TreeNode *create(int intarr[], int length, int i)
{
TreeNode *node = nullptr;if (i < length && intarr[i] != -1)
{
node = new TreeNode(intarr[i]);
node->lChild = create(intarr, length, i * 2 + 1);
node->rChild = create(intarr, length, i * 2 + 2);
}
return node;
}
bool ValidateBinarySearchTree(TreeNode *node)
{
if (node->lChild || node->rChild)
{
if (node->rChild && node->lChild)
{
if (node->rChild->valval || node->lChild->val>node->val)
{
return false;
}
else
{
return ValidateBinarySearchTree(node->rChild) && ValidateBinarySearchTree(node->lChild);
}
}
else if (node->lChild && !node->rChild)
{
if (node->lChild->val > node->val)
{
return false;
}
else
{
return ValidateBinarySearchTree(node->lChild);
}
}
else
{
if (node->rChild->val < node->val)
{
return false;
}
else
{
return ValidateBinarySearchTree(node->rChild);
}
}
}
else
{
return true;
}
}
int main()
{
int intarr[7] = {50,20,60,15,30,-1,70};
TreeNode *node = create(intarr, 7, 0);
cout << ValidateBinarySearchTree(node) << endl;;
system(“pause”);
return 0;
}
Validate Binary Search Tree 验证二叉搜索树
最新推荐文章于 2023-03-01 15:48:49 发布