核心思想:遞迴處理
前序:根左右
中序:左根右
後序:左右根
class
node
}public
class
testtree
system.out.
print
(root.val +
" ")
;preorder
(root.left)
;preorder
(root.right);}
// 中序
public
static
void
inorder
(node root)
inorder
(root.left)
; system.out.
print
(root.val +
" ")
;inorder
(root.right);}
// 後序
public
static
void
postorder
(node root)
postorder
(root.left)
;postorder
(root.right)
; system.out.
print
(root.val +
" ");}
}
核心思想:整個樹節點個數 = 根結點的個數(1) + 左子樹節點個數(遞迴) + 右子樹節點個數(遞迴)
。
// 計算節點個數
public
static
intsize
(node root)
// 遞迴思想 「拆分問題」
// 整個樹節點個數 = 根結點的個數(1) + 左子樹節點個數(遞迴) + 右子樹節點個數(遞迴)
return1+
size
(root.left)
+size
(root.right)
;}
核心思想:遞迴處理葉子節點個數 = 左子樹葉子節點個數 + 右子樹葉子節點個數
。
// 計算葉子節點個數
public
static
intleafsise
(node root)
if(root.left==null && root.right==null)
// 葉子節點個數 = 左子樹葉子節點個數 + 右子樹葉子節點個數
return
leafsise
(root.left)
+leafsise
(root.right)
;}
核心思想:遞迴處理第 k 層節點個數 = 左子樹的 k-1 層節點個數 + 右子樹的 k-1 層節點個數
eg:
// 求第 k 層節點個數
public
static
intklevelsize
(node root,
int k)
if(k ==1)
//第 k 層節點個數 = 左子樹的 k-1 層節點個數 + 右子樹的 k-1 層節點個數
return
klevelsize
(root.left,k-1)
+klevelsize
(root.right,k-1)
;}
// 在二叉樹中查詢指定元素
// 存在返回該節點的引用 不存在返回 null
node find
(node root,
char tofind)
if(root.val == tofind)
// 分別遞迴的去查詢左右子樹
node result =
find
(root.left,tofind);if
(result != null)
find
(root.left,tofind)
;return
find
(root.right,tofind)
;}
二叉樹基礎操作總結
1.定義資料結構 二叉樹 typedef char btdatatype typedef struct binarytreenode btnode 2.各個函式介面宣告 建立乙個二叉樹結點 btnode buybtnode btdatatype x 建立一顆二叉樹 btnode binarytree...
二叉樹的基礎操作
1 前序遍歷 public static void preorder node root system.out.println root.val preorder root.left preorder root.right 2 中序遍歷 public static void inorder node...
二叉樹的基礎操作
struct bitree 初始化bitree create 若想中序或後序建立,則只需改變函式中 t data a t lchild create t rchild create 這三條語句的順序 先給t data a在先的話是先序,在中間的話是中序,在最後的話是後序。先序的遍歷順序是根節點 左子...