二叉排序樹的刪除 附思路和原始碼C例項

2021-10-02 01:52:13 字數 1525 閱讀 8135

#include #include #define datatype int

#define status int

#define false 0

#define true 1

/** * 二叉排序樹結構體定義

*/typedef struct bstnodebstnode, *bstree;

/** * 申請新的樹節點記憶體空間

* @return bstree

*/bstree newbstnode()

return node;

}/**

* 將data資料渲染到新增節點,並且初始化新節點資料

* @param data

* @return

*/bstree getalonenode(datatype data)

/** * 二叉排序樹的插入

* @param bstroot

* @param data

* @return

*/bstree insertdata(bstree bstroot, datatype data) else if (data < bstroot->data)else if(data > bstroot->data)

return bstroot;

}/**

* 遞迴查詢

* @return

*/bstree search1(bstree bstroot, datatype data)else if(data == bstroot->data)else if(data < bstroot->data)else if(data > bstroot ->data)else

}/**

* 非遞迴查詢

*/bstree search2(bstree bstroot, datatype data)else if(tmp->data < data)else if(tmp->data > data)

}return null;

}/**

*二叉排序樹的前序遍歷

*/void preorder(bstree bstree)

}/**

* 刪除指定節點

*/void deletenodebydata(bstree bstree, datatype data)else if(targetnode->lchild == null)else

targetnode ->data = s->data;//交換資料

if (q != targetnode)else

free(s);}}

}int main() ;

bstree bstree = null;

for (int i = 0; i < 10; ++i)

preorder(bstree);

printf("\n");

deletenodebydata(bstree,17);

preorder(bstree);

return 0;

}

二叉排序樹刪除

二叉排序樹的刪除情況比較複雜,有以下三種情況需要考慮 第一種情況 刪除葉子節點 思路 第二種情況 刪除只有一棵子樹的節點,比如1 思路 如果targetnode有右子節點 第三種情況 刪除有兩棵子樹的節點 比如 7,3,10 思路 public class binarysorttreedemo bi...

構造二叉排序樹(BST) 二叉排序樹的刪除

主要是刪除操作 include include using namespace std typedef int elementtype typedef struct treenode threadtree void visit treenode node void inorder threadtre...

二叉排序樹的刪除

對於一般的二叉樹來說,刪去樹中的乙個結點是沒有意義的,因為它將使以被刪除的結點為根的子樹變成森林,破壞了整棵樹的結構 但是,對於二叉排序樹,刪去樹上的乙個結點相當於刪去有序序列中的乙個記錄,只要在刪除某個結點後不改變二叉排序樹的特性即可。在二叉排序樹上刪除乙個結點的演算法如下 btree delet...