如何识别二叉搜索树的叶节点

lor*_*771 4 arrays algorithm tree

我最近遇到了一个据说在技术面试中被问过的问题:

给定二叉搜索树的前序遍历,我们如何在不构建树的情况下识别叶节点?

例如:[5,3,2,4,8,7,9]

任何人发布它并且模糊不清,问题都是模糊的,我不确定这个方法应该是什么,我无法在网上找到经过验证的解决方案.

该问题应如何解决?

pse*_*ler 5

考虑你的例子: [5,3,2,4,8,7,9]

拿第一个元素:5.

因为这是一个前序遍历,它确实是根节点.

现在,在前序遍历中,在root之后重复左子树然后右子树.

你也知道在BST:

 nodes in left subtree < root < nodes in right subtree 
Run Code Online (Sandbox Code Playgroud)

因此,在5之后,所有小于5的系列元素属于左子树.同样对于正确的.

所以你最终得到了这个(你不需要显式创建树):

        5
     /    \
  [3,2,4] [8,7,9]
Run Code Online (Sandbox Code Playgroud)

现在[3,2,4]是左子树部分和[8,7,9]右边的前序遍历.

递归两个子阵列,当你留下大小为1的数组时,那就是叶子.

  • 我不认为树需要完善或完善.例如:对于[2,3],这不是一个完美的树,但算法适用于它. (2认同)