struct BSTreeNode
{
struct BSTreeNode *leftchild;
AnsiString data;
struct BSTreeNode *rightchild;
};
struct BSTreeNode * root;
String tree = "";
struct BSTreeNode * newNode(AnsiString x)
{
struct BSTreeNode * node = new struct BSTreeNode;
node->data = x;
node->leftchild = NULL;
node->rightchild = NULL;
return node;
}
struct BSTreeNode * insertBSTree(struct BSTreeNode * node , AnsiString x)
{ if(node == NULL) return newNode(x);
if(x < node->data)
node->leftchild = insertBSTree(node->leftchild, x);
else
node->rightchild = insertBSTree(node->rightchild, x);
return node;
}
void printBSTree(struct BSTreeNode * node)
{ if(node != NULL)
{ printBSTree(node->leftchild);
tree += node->data+"_";
printBSTree(node->rightchild);
}
}
//--- insert button ---
void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString data;
data = Edit1->Text;
root = insertBSTree(root, data);
tree = "";
printBSTree(root);
Memo1->Lines->Add(tree);
}
假设我将A、B、C、D、E、F、G插入二叉树(Button1Click是向二叉树插入数据的按钮) 二叉树应该是这样的
A / \ B C / \ / \ H J D E / \ F G
但结果就像
A
\
B
\
C
\
D
\
E
\
F
\
G
struct BSTreeNode ---> 树节点
struct BSTreeNode * newNode(AnsiString x) ---> 创建一个新节点
button1点击--->插入编辑->文本中的数据;到二叉树。
insertBSTree --->如果节点为null,则创建一个新节点。将数据插入左子/右子
当您使用
<
来确定要插入哪个分支时,您已经创建了一个二叉搜索树:
struct BSTreeNode * insertBSTree(struct BSTreeNode * node , AnsiString x) { if(node == NULL) return newNode(x); if(x < node->data) node->leftchild = insertBSTree(node->leftchild, x); else node->rightchild = insertBSTree(node->rightchild, x); return node; }
你的第二个例子是一棵二叉搜索树,只是不是平衡树。
显示的功能无法创建您预期的结果。