我在面试中被问及在给定遍历二叉搜索树的情况下,找出叶节点而不构建原始树。我知道binary search tree
必须满足的财产,但我找不到任何关系到如何利用这个属性来完成。只有我可以识别的是preorder traversal
中的first node
将始终是根。谷歌搜索也没有产生这个问题的任何结果。我不希望代码只是一个简单的提示开始就足够了。查找二叉搜索树的叶节点
编辑:尝试了很多后,我得到了这个解决方案:
#include<iostream>
#include<vector>
#include<string>
using namespace std;
void fl(vector<int> &v, int lo, int hi){
if (lo>hi) return;
if (lo == hi) { cout<<"leaf ^^^^^^^ "<< v[hi]<<"\n"; return; }
int root = v[lo];
int i;
for(i = lo+1 ; i <= hi ; i++) if (v[i] > root) break;
fl(v, lo+1, i -1);
fl(v, i , hi);
}
int main(){
vector<int> v1 = {8, 3, 1, 6, 4, 7, 10, 14, 13};
vector<int> v2 = {27, 14, 10, 19, 35, 31, 42};
vector<int> v3 = {9,8,7,6,5,4,3,2,1};
fl(v3,0,v3.size()-1);
return 0;
}
比变量名其他改善将是非常有帮助的任何建议
一个简单的解释逻辑将是非常有益的。只是它做了什么 – anekix