判断的后序遍历序列是否是二叉查找树

二叉查找树:如果左子树不为空,那么左子树上的所有节点都小于根节点;

      如果右子树不为空,那么又子树上的所有节点都大于根节点;

      左右子树也是二叉排序树。

在后序遍历得到的序列中,最后一个数字是树的根节点的值。数组中前面的数字可以分为两部分:
  • (1)第一部分是左子树结点的值,它们都比根结点的值小
  • (2)第二部分是右子树结点的值,它们都比根结点的值大
  • (3)递归左子树
  • (4)递归右子树

 

代码:

  public class BinarySearchTrees
    {
        //有序遍历结果的特点是,最后一个元素是根元素,根据这个根元素会把其他的子序列按照大小分成两个部分,
        //最后递归地对这两个子序列分别进行上述操作

        public static bool VerifyBST()
        {
            int[] array = { 5,7,6,9,11,10,8};
          return  VerifyBST(array, 0, array.Length-1);
        }

        public static bool VerifyBST(int[] array, int start, int end)
        {
            if (start == end)
                return true;
            int root = array[end];

            //遍历左子树
            int left = start;
            while (left < end && array[left] < root) { left++; }
            left--;

            //遍历右子树
            int right = left+1;
            while (right < end && array[right] > root)
            {
                if (array[right] < root) //右子树如果有小于根节点的,直接返回
                    return false;
                right++;
            }

            //递归左子树
            bool leftRecurse = true;
            if (left - start > 0)
            {
                leftRecurse = VerifyBST(array, start, left);
            }

            //递归右子树
            bool rightRecurse = true;
            if (end - left > 0)
            {
                rightRecurse = VerifyBST(array, left, end);
            }

            return leftRecurse&&rightRecurse;
        }
    }

  

转载于:https://www.cnblogs.com/wuMing-dj/p/3379976.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值