樹(shù)的增刪查改

1、定義方式

struct node {
    typename data;  //數(shù)據(jù)域
    node* lchild;   //左孩子
    node* rchild;   //右孩子
};

2、新建節(jié)點(diǎn)

node* newNode(int v) {
    node* Node = new node;  //申請(qǐng)一個(gè)node型變量的地址空間
    Node->data = v;         //節(jié)點(diǎn)權(quán)值為V
    Node->lchild = Node->rchild = NULL;     //初始狀態(tài)下沒(méi)有左右孩子
    return Node;
}

3、查找與修改
先中后

void search(node* root, int x, int newdata) {
if (root == NULL) {
return;
}

if (root->data == x) {
    root->data = newdata;
}

search(root->left, x, newdata);
search(root->right, x, newdata);

}


4、插入
isnert必須使用引用(因?yàn)樾薷牧酥羔槪迦胄薷牟挥?,則是因?yàn)楦牡氖侵羔樦赶虻膬?nèi)容,所以不用

總結(jié)就是如果需要新建節(jié)點(diǎn),(就是對(duì)原有二叉樹(shù)結(jié)構(gòu)作出修改,就要引用)
如果只是修改節(jié)點(diǎn)內(nèi)容,或僅僅遍歷二叉樹(shù),就不用

void insert(node* &root, int x) { //注意是星引用,因?yàn)橐薷倪@個(gè)指針的
if (root == NULL) {
root = new node(x);
return;
}
if(二叉樹(shù)的的性質(zhì),x應(yīng)該插在左邊){
insert(root->left, x);
}else{
insert(root->right, x);
}
}


5、二叉樹(shù)的創(chuàng)建

node* create(int data[], int n) {
node* root = NULL;
for (int i = 0;i < n;i++) {
insert(root, data[i]);
}
return root;
}



6、完全二叉樹(shù)的存儲(chǔ)結(jié)構(gòu)
2的k次大小數(shù)組,k是最大高度
左孩子編號(hào)為2x,右孩子為2x+1
(根節(jié)點(diǎn)從1開(kāi)始,不從0開(kāi)始)
事實(shí)上,二叉樹(shù)也可以定義為這樣,不空間消耗巨大(K個(gè)節(jié)點(diǎn)就需要2的K次,因?yàn)榭赡艽嬖谝粭l只有左或者右的數(shù))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容