注意传入的树结点要加引用,而且单根不为空时,是在父结点的左或右孩子位置插入新结点,故必须记录当前结点的父结点。
#include<stdio.h>
#include<iostream>
#include<string>
#include<vector>
using namespace std;
typedef struct LNode {
int data;
struct LNode* left;
struct LNode* right;
} TreeNode, *BiTree;
void insertBST(BiTree& root, int data) { //树一定要传入引用数据类型
//新建一个树结点
TreeNode* p = new TreeNode;
p->data = data;
p->left = NULL;
p->right = NULL;
TreeNode* pre = new TreeNode;
TreeNode* cur = new TreeNode;
//若此时根为空,则树结点为根
if (root == NULL) {
root = p;
printf("-1\n");
} else {
cur = root;//当前结点
while (1) {
//若此时根不空且data大于根值,找到根右边空的位置插入
if (data > cur->data) {
pre = cur;
cur = cur->right;
if (cur == NULL) {
pre->right = p;
printf("%d\n", pre->data);
break;
}
} else {
//若此时根不空且data小于根值,找到根左边空的位置插入
pre = cur;
cur = cur->left;
if (cur == NULL) {
pre->left = p;
printf("%d\n", pre->data);
break;
}
}
}
}
}
int main() {
int N, data;
BiTree root = NULL;//初始化空树
while (scanf("%d", &N) != EOF) {
while (N--) {
scanf("%d", &data);
insertBST(root, data);
}
}
return 0;
}

京公网安备 11010502036488号