中序遍历的C语言方法与二叉查找树的检验——binary search tree判定

本文章参考https://blog.csdn.net/wydyd110/article/details/83000194
二叉树遍历分为三种:前序、中序、后序,其中序遍历最为重要。是根据根节点的顺序命名的。
比如正常的一个满节点,A:根节点、B:左节点、C:右节点,前序顺序是ABC(根节点排最先,然后同级先左后右);中序顺序是BAC(先左后根最后右);后序顺序是BCA(先左后右最后根)。
而中序遍历C语言表述如下:
//*typedef struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
struct TreeNode parent;
} TreeNode;
结构
//
void middle_order(TreeNode *Node) {
if(Node != NULL) {
middle_order(Node->left);
printf("%d ", Node->data);
middle_order(Node->right);
}
}
此处的递归其实不难以理解,总之中序就是让每一个数的左子树上的都提前于此数输出,右子树上的都落后于此数输出,上述代码显然达到了此效果。
而二叉查找树的定义是“左子树中每一个均小于该根元素,右子树都大于。子树也满足此性质”。
所以判断二叉查找树,可以用中序遍历的思想。
上述的二叉树中序遍历中是输出此处的值,此处其实只需要稍作调整,将输出变为判断此数是否与上一个测到的数大小满足上一个永远小于下一个,即可。此处用静态变量代替前驱节点判断后再赋值既可以达到此效果。
代码为:
bool isBST(TreeNode *root)
{
static TreeNode *prev;
if(root != NULL)
{
if(!isBST(root->left))
return false;
if(prev != NULL && root->data < prev->data)
return false;
prev = root;
if(!isBST(root->right))
return false;
}
return true;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值