gpt4 book ai didi

c++ - 二叉树实现 C++

转载 作者:太空狗 更新时间:2023-10-29 20:28:16 25 4
gpt4 key购买 nike

为了好玩,我一直在尝试用 C++ 实现二叉搜索树。我的问题是我的插入功能有问题。以下是我目前所拥有的:

class TreeNode{

public:
int data;
TreeNode *left;
TreeNode *right;
void Insert(int value, TreeNode *x);
void TreeNode::Print(TreeNode *x);
TreeNode();
};


TreeNode::TreeNode(){

left = NULL;
right = NULL;

}

.

void TreeNode::Insert(int value, TreeNode *x){

if(x->left == NULL && x->right == NULL){
TreeNode *tree = new TreeNode();
tree->datavalue;
x->left = tree;
}

else if(x->left == NULL && x->right != NULL){

TreeNode *tree = new TreeNode();
tree->data = value;
x->left = tree;
}

else if(x->left != NULL && x->right == NULL){

TreeNode *tree = new TreeNode();
tree->data = value;
x->right = tree;
}

else if(x->left != NULL && x->right != NULL){

??????

}

}

最佳答案

不要盲目插入,按照下面的逻辑。如果 x.value 小于根值,则尝试向左插入。如果 x.value >= root.value,则向右移动。重复此逻辑,直到您遇到 NULL 值。这将是插入元素的合适位置。

你可以翻转逻辑,我只是​​在 < 上选择了 left 因为 less than 有点向左箭头。 <-:P

TreeNode *root = this;
TreeNode *parent = root;
//Traverse the tree, go left if x.val < , else go right(>=)
while(root) {
parent = root;
root = (root->value > x.value) ? root->left : root->right;
}
if(parent->value > x->value)
parent->left = x;
else
parent->right = x;

如果您不关心顺序,请使用队列进行深度优先搜索。

queue<TreeNode*> nodes;
nodes.push(this);
while(1)
{
if(!nodes.front()->left)
{
nodes.front()->left = x;
return;
}
else if (!nodes.front()->right)
{
nodes.front()->right = x;
return;
}
nodes.push(nodes.front()->left);
nodes.push(nodes.front()->right);
nodes.pop();
}

关于c++ - 二叉树实现 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13667803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com