樹 二叉樹結點的插入

2022-08-18 00:57:10 字數 1765 閱讀 9857

1,需要考慮的問題:

1,是否能夠在二叉樹任意結點處插入子結點?

1,不能,二叉樹每個結點的成員是相對固定的,只有兩個指向左右後繼結點的指標成員;

2,是否需要指定新資料元素(新結點)的插入位置?

1,需要;

2,插入新結點(或資料元素)作為葉結點孩子,具體插入左邊還是右邊呢?

2,二叉樹結點的位置列舉型別:

1,enum btnodepos

any,  // 不介意,左右孩子都可以

left,  // 插入新結點只能作為左孩子;

right  // 插入新結點只能作為右孩子;

3,插入方式:

1,插入新結點:

1,bool insert(treenode* node);

1,只要新結點能插入就可以,不管左邊還是右邊的位置;

2,左右沒有位置,返回 false;

2,bool insert(treenode* node, btnodepos pos);

1,按照 pos 要求插入位置,要求位置沒有位置,則返回 false;

2,通用樹結構插入操作只會返回 true;

2,插入資料元素:

1,bool insert(const t& value, treenode* parent);

1,只要有位置就插入;

2,bool insert(const t& value, treenode* parent, btnodepos pos);

1,按 pos 要求插入;

4,新結點的插入:

1,查詢;

2,插入;

5,指定位置的結點插入:

6,插入新結點:

7,插入資料元素:

8,二叉樹的插入成員函式實現:

1,基於結點的插入

1

bool insert(treenode*node)25

6virtual

bool insert(treenode*node, btnodepos pos)717

else

//非空樹

1824

else

2528}29

}30else

3134

return

ret;

35   }

2,基於資料值的插入:
1

bool insert(const t& value, treenode*parent)25

virtual

bool insert(const t& value, treenode*parent, btnodepos pos)615

else

1626}27

return

ret;

28    }

9,小結:

1,二叉樹的插入操作需要指明插入的位置;

1,定義列舉常量;

2,插入操作必須正確處理指向父結點的指標;

3,插入資料元素時需要從堆空間中建立結點;

4,當資料元素插入失敗時需要釋放結點空間;

DS二叉樹 二叉樹之父子結點

題目描述 給定一顆二叉樹的邏輯結構如下圖,先序遍歷的結果,空樹用字元 0 表示,例如ab0c00d00 建立該二叉樹的二叉鏈式儲存結構。編寫程式輸出該樹的所有葉子結點和它們的父親結點 輸入 第一行輸入乙個整數t,表示有t個二叉樹 第二行起,按照題目表示的輸入方法,輸入每個二叉樹的先序遍歷,連續輸入t...

二叉樹結點, 排序

二叉樹結點,排序 1.二叉搜尋樹結點最小距離 給定乙個二叉搜尋樹的根結點 root,返回樹中任意兩節點的差的最小值 對這個序列相鄰相減,取最小值即可。實現時,可以優化掉這個序列。在遍歷時記錄上乙個訪問的節點值,和當前節點相減,記錄下最小值即可 定義樹節點 public class treenode ...

二叉樹刪除結點

二叉樹完成刪除結點的操作.規定 1 如果刪除的節點是葉子節點,則刪除該節點 2 如果刪除的節點是非葉子節點,則刪除該子樹 思路首先先處理 考慮如果樹是空樹root,如果只有乙個root結點,則等價將二叉樹置空 然後進行下面步驟 1.因為我們的二叉樹是單向的,所以我們是判斷當前結點的子結點是否需要刪除...