二叉搜索树的后序遍历序列

来源:互联网 发布:vs2017写c语言 编辑:程序博客网 时间:2024/04/30 18:26

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。

bool VerifySequenceOfBST(int sequence[], int length){    if (sequence == NULL || length <= 0){        return false;    }    int root = sequence[length - 1];    //在二叉搜索树种左子树的结点小于根结点    int i = 0;    for (; i < length - 1; ++i){        if (sequence[i] > root){            break;        }    }    //在二叉搜索树中右子树的结点大于根结点    int j = i;    for (; j < length - 1; ++j){        if (sequence[j] < root){            return false;        }    }    //判断左子树是不是二叉搜索树    bool left = true;    if (i > 0){        left = VerifySequenceOfBST(sequence, i);    }    //判断右子树是不是二叉搜索树    bool right = true;    if (i < length - 1){        right = VerifySequenceOfBST(sequence + i, length - i - 1);    }    return (left && right);}

测试用例

  • 功能测试(输入的后续遍历的序列对应一颗二叉树,包括完全二叉树、所有结点都没有左/右字数的二叉树、只有一个结点的二叉树;输入的后续遍历的序列没有对应的二叉树)
  • 特殊输入测试(指向后序遍历序列的指针为NULL指针)

扩展

  • 判断数组是不是某二叉搜索树的前序遍历的结果
  • 重建二叉树
0 0
原创粉丝点击