資料結構 樹

2021-10-06 16:28:12 字數 1634 閱讀 4065

二叉樹是樹的一種,特點如下:

1.每個節點最多有兩顆子樹,節點的度最大為2

2.左右子樹次序不能顛倒

3.即使某乙個節點只有乙個子樹,也要區分。

二叉查詢樹:

1.左子樹上的所有節點值均小於根節點值

2.右子樹上的所有節點均不小於根節點的值

3.左右子樹也滿足以上兩個條件

有序陣列的優勢是可以使用二分法快速查詢,鍊錶的優勢在於資料的插入和刪除。二叉樹兼具兩則的優點於一身。

在這裡插入**片

typedef

struct node* p_node;

struct node

p_node;

二叉查詢樹的查詢實現:

在這裡插入**片

p_node search_tree

(p_node p,

int data)

if(p ==

null

)printf

("no find node\n");

return p;

}

在這裡插入**片

node_t *

insert_tree

(node_t *root,

int x)

else

if(x < root->val)

else

return root;

}

刪除結點

刪除結點分為幾種情況:

1.結點為葉子結點,p為葉子結點,則直接刪除該節點,並調整父節點指標

2.結點為單支結點,p的子樹和p的父節點直接相連,刪除p結點即可

3.結點的左右子樹均不為空,找到p的直接後繼結點(p結點右孩子的最左子孫),刪除最左子孫,並讓最左子孫的父親結點成為該節點右子樹的父親結點,將最左子孫的值賦給p結點

在這裡插入**片

intdelete_tree_node

(node_t *root,

int x)

else

if(x < p_node->val)

else}if

(p_node && p_node->lchild ==

null

&& p_node->rchild ==

null

)else

if(q->lchild == p_node)

else

}else

if(p_node &&

(p_node->lchild || p_node->rchild)

)else

else

if(q->lchild == p_node && p_node->rchild)

else

if(q->rchild == p_node && p_node->lchild)

else

free

(p_node);}

}else

p_node->val = s->val;

if(t == p_node)

else

free

(s);

}return find;

}

資料結構 樹

樹的概念 1.家族樹 在現實生活中,有入如下血統關係的家族可用樹形圖表示 張源有三個孩子張明 張亮和張麗 張明有兩個孩子張林和張維 張亮有三個孩子張平 張華和張群 張平有兩個孩子張晶和張磊。以上表示很像一棵倒畫的樹。其中 樹根 是張源,樹的 分支點 是張明 張亮和張平,該家族的其餘成員均是 樹葉 而...

資料結構 樹

1 定義 樹是一種非線性結構,是一種一對多的資料結構。分析樹的結構,我們用遞迴的方法,根結點下面又可以看做是子樹。2 樹的儲存結構 我們一般用孩子兄弟法儲存。也就是把乙個結點的左邊第乙個孩子放在此結點的左邊孩子,把此結點的右兄弟放在此結點的右邊孩子。這樣就產生了二叉樹。二叉樹和樹可以相互對應。3 二...

資料結構 樹

二叉樹性質回顧 滿二叉樹 完全二叉樹等 給定一棵二叉樹,要求分層遍歷該二叉樹,即從上到下按層次訪問該樹,每一層單獨輸出一行,每一層要求訪問的順序為從左到右。我們在遍歷的過程中將該層節點的孩子節點壓入乙個佇列,這樣就可以實現從上到下一層一層地遍歷該二叉樹。層序遍歷 並分層列印 如果不用分層的話只用佇列...