二叉搜尋樹

2021-08-20 01:58:47 字數 1556 閱讀 6844

初始化

void searchtreeinit(searchnode** proot)

*proot = null;

return;

}

銷毀

void destroysearchnode(searchnode* node)

void searchtreedestroy(searchnode** proot)

if(*proot == null)

searchnode* root = *proot;

searchtreedestroy(&root->lchild);

searchtreedestroy(&root->rchild);

destroysearchnode(root);

*proot = null;

return;

}

插入

void searchtreeinsert(searchnode** proot,searchnodetype to_insert)

if(*proot == null)

searchnode* cur = *proot;

if(to_insert < cur->data)else if(to_insert > cur->data)else

return;

}

找節點

searchnode* searchtreefind(searchnode* root,searchnodetype to_find)

if(to_find < root->data)

else if(to_find > root->data)else

}

刪除(思路):

1.找到to_remove所在的位置

2.如果沒找到,就直接返回

3.如果找到了,分情況討論

a.要刪除的節點沒有子樹

b.要刪除的節點只有左子樹

c.要刪除的節點只有右子樹

d.要刪除的節點有左右子樹

void searchtreeremove(searchnode** proot, searchnodetype to_remove)

if(*proot == null)

//1.

searchnode* root = *proot;

if(to_remove < root->data)else if(to_remove > root->data)elseelse if(root->lchild != null && root->rchild == null)else if(root->lchild == null && root->rchild != null)else

to_remove_node->data = min->data;

searchtreeremove(&to_remove_node->rchild, min->data);

return;}}

return;

}

二叉搜尋樹 二叉搜尋樹

題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...

二叉搜尋樹 修剪二叉搜尋樹

第一反應是重構,看來別人的解答發現,其實不用重構那麼複雜。treenode trimbst treenode root,int low,int high if root val high 下一層處理完左子樹的結果賦給root left,處理完右子樹的結果賦給root right。root left ...

樹 二叉樹 二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 13輸出 true 示例 2 輸入 5 14 3 6輸出 false 解釋 輸入為 ...