意外的二叉树结果

问题描述 投票:0回答:1
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,则创建一个新节点。将数据插入左子/右子

c++ binary-tree c++builder
1个回答
0
投票

当您使用

<
来确定要插入哪个分支时,您已经创建了一个二叉搜索树:

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;
}

你的第二个例子一棵二叉搜索树,只是不是平衡树。

显示的功能无法创建您预期的结果。

© www.soinside.com 2019 - 2024. All rights reserved.