我有一個家庭作業分配來實現二叉搜索樹(創建,刪除,搜索)。我使用了老師提供的例子,但我無法使其工作。二叉搜索樹節點插入不正常
這裏是到目前爲止我的代碼:
void insert_node(int k){
struct node *nodnou,*flow,*parent;
nodnou = (struct node*)malloc(sizeof(node));
nodnou->st = NULL;
nodnou->dr = NULL;
nodnou->nr = k;
if (root==NULL)
{
root = (struct node*)malloc(sizeof(node));
root = nodnou;
}
else
{
flow = (struct node*)malloc(sizeof(node));
parent = (struct node*)malloc(sizeof(node));
flow = root;
parent = root;
while (((flow->st!=NULL) || (flow->dr!=NULL)) && flow!=NULL)
{
if (k<flow->nr)
{
parent = flow;
flow = flow->st;
}
else
{
parent = flow;
flow = flow->dr;
}
}
if (k<flow->nr)
{
parent->st = nodnou;
}
else
{
parent->dr = nodnou;
}
}
}
思維方式:該函數獲得我們要插入的參數k的節點的值。該函數只會插入樹的根(根是全局變量)。
我認爲我最大的問題是while
循環掃過樹找到新節點的位置。
如果我使用while (flow!=NULL)
它將無法工作,因爲流指針會獲得一個不存在的內容。請幫助我瞭解我的錯誤(家庭作業)。
'的功能將僅插入的根樹(根是全局變量)。「你能解釋一下嗎?你可以解釋一下哪個樹插入這個節點? –
根是全局的,因爲我需要一棵樹來實現。 – johnjhye