题解 | #二叉排序树#

二叉排序树

https://www.nowcoder.com/practice/30a0153649304645935c949df7599602

#include <iostream>
using namespace std;
struct Bitree {
    Bitree* left;
    Bitree* right;
    int val;//节点的值
};
Bitree* creatnode(int data) { //创建二叉树节点
    Bitree* node = (Bitree*)malloc(sizeof(Bitree));
    node->val = data;
    node->left = NULL;
    node->right = NULL;
    return node;
}
Bitree* paixuCreat(Bitree* root, int value,int* parent) //用parent记录父亲节点的值
{ 
    if (root == NULL) { //当前节点为空
        return creatnode(value);
    }
    if (value < root->val) {
        *parent = root->val;
        root->left = paixuCreat(root->left, value, parent);
    } else {
        *parent = root->val;
        root->right = paixuCreat(root->right, value, parent);
    }
    return root;
}
int main() 
{
    Bitree* root = NULL;
    int N, value;
    cin >> N;
    int* parentNodes = (int*)malloc(N * sizeof(int));//创建数组以保存父亲节点的值
    parentNodes[0] = -1;//第一个值默认为-1
    for (int i = 0; i < N; i++) {
        cin >> value;
        int parent = -1;
        root = paixuCreat(root, value, &parent);
        parentNodes[i] = parent;//记录父亲节点
    }
    for (int i = 0; i < N; i++) {
        cout << parentNodes[i] << endl; //输出父亲节点
    }
}
// 64 位输出请用 printf("%lld")

创建排序二叉树的同时用parent变量记录其父节点然后保存在数组里,最后再输出

全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务