1002. 計算二叉查找樹的高度

devcpp代碼名字如果太相近就會出現bug

#include <iostream>
using namespace std;
const int maxn = 100;
int a[maxn],b[maxn];
struct TreeNode {
    int val;
    TreeNode* left,*right;
    TreeNode(int a):val(a),left(NULL),right(NULL) {}
};

int height(TreeNode* root) {
    if (root==NULL) return 0;
    else return max(height(root->left),height(root->right))+1;
}


TreeNode* f(int l1,int r1,int l2,int r2) {
    if (l2<=r2) {
        TreeNode* root = new TreeNode(a[l1]);
        int i=l2,cmp=0;
        while(i<=r2&&a[l1]!=b[i]) {
            i++; cmp++;
        }
        if (i>r2) return NULL;
        root->left = f(l1+1,l1+cmp,l2,i-1);
        root->right= f(l1+cmp+1,r1,i+1,r2);
//      cout<<a[l1]<<" ";
        return root;
    } else return NULL;
}




int main() {
    int t;
    cin>>t;
    while(t--) {
        int n;
        cin>>n;
        for(int i=1;i<=n;i++) cin>>a[i];
        for(int i=1;i<=n;i++) cin>>b[i];
        TreeNode* root = f(1,n,1,n);
        cout<<height(root)-1<<endl;

    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章