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,基於結點的插入
1bool insert(treenode*node)25
6virtual
bool insert(treenode*node, btnodepos pos)717
else
//非空樹
1824
else
2528}29
}30else
3134
return
ret;
35 }
2,基於資料值的插入:
19,小結: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 }
1,二叉樹的插入操作需要指明插入的位置;
1,定義列舉常量;
2,插入操作必須正確處理指向父結點的指標;
3,插入資料元素時需要從堆空間中建立結點;
4,當資料元素插入失敗時需要釋放結點空間;
DS二叉樹 二叉樹之父子結點
題目描述 給定一顆二叉樹的邏輯結構如下圖,先序遍歷的結果,空樹用字元 0 表示,例如ab0c00d00 建立該二叉樹的二叉鏈式儲存結構。編寫程式輸出該樹的所有葉子結點和它們的父親結點 輸入 第一行輸入乙個整數t,表示有t個二叉樹 第二行起,按照題目表示的輸入方法,輸入每個二叉樹的先序遍歷,連續輸入t...
二叉樹結點, 排序
二叉樹結點,排序 1.二叉搜尋樹結點最小距離 給定乙個二叉搜尋樹的根結點 root,返回樹中任意兩節點的差的最小值 對這個序列相鄰相減,取最小值即可。實現時,可以優化掉這個序列。在遍歷時記錄上乙個訪問的節點值,和當前節點相減,記錄下最小值即可 定義樹節點 public class treenode ...
二叉樹刪除結點
二叉樹完成刪除結點的操作.規定 1 如果刪除的節點是葉子節點,則刪除該節點 2 如果刪除的節點是非葉子節點,則刪除該子樹 思路首先先處理 考慮如果樹是空樹root,如果只有乙個root結點,則等價將二叉樹置空 然後進行下面步驟 1.因為我們的二叉樹是單向的,所以我們是判斷當前結點的子結點是否需要刪除...