给定一个数字列表,确定它是否可以表示二叉搜索树(BST)的预订遍历列表

时间:2015-02-02 19:56:39

标签: preorder

给定一个数字列表,确定它是否可以表示二叉搜索树(BST)的预订遍历列表。

public boolean isValid(int[] arr)
    {

        int root = arr[0];
        int i=1;

        while(  i< arr.length && root >arr[i])
        {
            i++;
        }

        for(;i<arr.length;i++)
        {
            if(arr[i] <root)
            {
                return false;
            }
        }   

        return true;
    }

上述功能适用于大多数案例ex {3,4,5,1,2}{3, 2, 1, 5, 4, 6}{1,2,3}。 但它对{1,3,4,2}无效。

任何人都可以帮我解决问题。

1 个答案:

答案 0 :(得分:0)

“想法”会列出更多3个元素的列表,您可以在BST中识别leftrightroot,就像前三个元素一样。现在,当且仅当left<=root<=right时,它才是预订。现在root进入堆栈并接下来的3并应用相同的逻辑。

直到你有少于三个元素:

  1. 使用规则left
  2. ,两个元素变为rootleft<=root
  3. 一个元素只是root
  4. 在这两种情况下,您都必须将root放入堆栈中。

    现在获取堆栈并应用相同的逻辑......直到堆栈中只有一个元素,这意味着它是预订BST。

    现在把它写成递归函数非常简单有趣。