本文章参考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;
}
中序遍历的C语言方法与二叉查找树的检验——binary search tree判定
最新推荐文章于 2024-06-06 22:37:24 发布