前言:二叉樹是只有乙個根節點,每個結點最多有兩個子樹的樹結構。通常子樹被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。空二叉樹(無根節點)
只有乙個根結點
只有左子樹
只有右子樹
完全二叉樹
需要思考:左節點的值全部小於根節點的,右節點反之
建立乙個初始化二叉樹的建構函式,使其具有兩個屬性:根節點,插入方法
function
init()
}
建立乙個節點生成的建構函式,有三個屬性:當前值,左節點及右節點
function
node
(data, left, right)
插入函式的實現,在此需要用到迴圈對比,如果當前插入值小於根節點,就將其和根節點root的左孩子比較,1.左孩子不存在則直接填入,2.存在則將左孩子假設為根節點root 』 ,繼續與根節點root 』 比較…。實現方法如下:
function
insert
(data)
else
}else}}
}}
檢驗是否建立成功
let binarytree =
newinit()
;binarytree.
insert(3
);binarytree.
insert(2
);binarytree.
insert(5
);binarytree.
insert(6
);binarytree.
insert(3
);binarytree.
insert(5
);
建立二叉樹如下:
分為:前序遍歷
中序遍歷
後序遍歷
注意:新增read遍歷方法:
function
init()
**this
.read = ordermap;
**}
實現read方法:
/**
* 前、中、後序遍歷
* @param type
*/function
ordermap
(type)
let arr =[(
)=>console.
log(current.data),(
)=>current.left &&
deepmap
(current.left),(
)=>current.right &&
deepmap
(current.right)];
let order =
;switch
(type)
order.
map(item=>)}
}
在建立二叉樹後,呼叫read方法,就可以實現了
binarytree.
read(1
)//前序:3 2 5 3 6 5
binarytree.
read(2
)//中序:2 3 3 5 5 6
binarytree.
read(3
)//後序:2 3 5 6 5 3
即:最左為最小值,最右為最大值,以下為查詢最小值
function
findmin
(current)
return min;
}console.
log(binarytree.
findmin
(binarytree.root)
)//node 2
被刪除節點分為三種情況:
具體實現:
先建立乙個新的二叉樹:
let binarytree2 =
newinit()
;binarytree2.
insert(10
);binarytree2.
insert(8
);binarytree2.
insert(7
);binarytree2.
insert(9
);binarytree2.
insert(14
);binarytree2.
insert(11
);binarytree2.
insert(17
);binarytree2.
insert(10
);binarytree2.
insert(12
);binarytree2.
insert(13
);binarytree2.
insert(15
);binarytree2.
insert(19
);
在init函式中新增刪除方法:
function
init()
this
.read = ordermap;
//前中後遍歷
this
.findmin = findmin;
//當前樹的最小值節點
this
.deletenode = deletenode;
//刪除某個節點
}
完成刪除函式(有兩個子節點的採用第二種,即用右子樹最小值替換):
function
deletenode
(data)
if(node.data == data)
//只有右節點
else
if(node.left ===
null
)//只有左節點
else
if(node.right ===
null
)else
}else
if(data < node.data)
else
}}
驗證:
binarytree2.
deletenode(14
);console.
log(
'刪除節點14'
)binarytree2.
show
()
二叉樹 二叉樹的相關操作
遞迴實現 建立求樹高 求葉子數 求節點數 統計度為2的結點個數 後序輸出 先序輸出 中序輸出 交換左右子樹 include include include define true 1 define false 0 define ok 1 define error 0 define overflow ...
二叉樹相關操作
include using namespace std typedef struct btnode btnode btnode newnode int value 非遞迴 btnode nodesearch btnode root,btnode parent,int value 遞迴 btnode ...
二叉樹的相關操作
定義節點 typedef struct treenodebitreenode,bitree 注意 在有修改樹的情況下,必須用指標做引數,即bitree root,不能寫成bitreenode root。void createbitree bitree t 其餘中序和後序,格式一樣 void preo...