题解 | 二叉搜索树

二叉搜索树

https://www.nowcoder.com/practice/3d6dd9a58d5246f29f71683346bb8f1b

#include <stdio.h>
#include <string>
using namespace std;

struct TreeNode {
    int data;
    TreeNode* left;
    TreeNode* right;
};
void InsertBST(TreeNode*& root, int data) {
    TreeNode* pNew = new TreeNode();
    pNew->data = data;
    pNew->left = NULL;
    pNew->right = NULL;
    if (root == NULL) {
        root = pNew;
    } else {
        TreeNode* curNode = root;
        TreeNode* prevNode ;
        while (1) {
            if (curNode->data > data) {
                prevNode = curNode;
                curNode = curNode->left;
                if (curNode == NULL) {
                    curNode = pNew;
                    prevNode->left = curNode;
                    break;
                }
            } else {
                prevNode = curNode;
                curNode = curNode->right;
                if (curNode == NULL) {
                    curNode = pNew;
                    prevNode->right = curNode;
                    break;
                }
            }
        }

    }
}
void PreOrder(TreeNode* root) {
    if (root == NULL) {
        return;
    }
    printf("%d ", root->data);
    PreOrder(root->left);
    PreOrder(root->right);
}
void InOrder(TreeNode* root) {
    if (root == NULL) {
        return;
    }
    InOrder(root->left);
    printf("%d", root->data);
    InOrder(root->right);
}
bool SameTree(TreeNode* root1, TreeNode* root2) {
    if (root1 == NULL && root2 == NULL) {
        return true;
    }
    if (root1 == NULL || root2 == NULL) {
        return false;
    }
    if (root1->data != root2->data) {
        return false;
    }
    return SameTree(root1->left, root2->left) &&
           SameTree(root1->right, root2->right);
}

int main() {
    int n;
    while (scanf("%d", &n) != EOF && n != 0) {
        char str[1000];
        scanf("%s", str);

        TreeNode* root = NULL;
        for (int i = 0; str[i] != '\0'; i++) {
            InsertBST(root, str[i] - '0');
        }
        for (int i = 0; i < n; i++) {
            char str1[1000];
            scanf("%s", str1);
            TreeNode* newRoot = NULL;
            for (int j = 0; str1[j] != '\0'; j++) {
                InsertBST(newRoot, str1[j] - '0');
            }

            if (SameTree(root, newRoot)) {
                printf("YES\n");
            } else {
                printf("NO\n");
            }
        }
    }

    return 0;
}

全部评论

相关推荐

04-03 22:41
兰州大学 C++
老六f:有时候是HR发错了,我之前投的百度的后端开发,他给我发的算法工程师,但是确实面的就是百度开发
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务