二叉樹 基礎操作

2021-10-04 12:14:39 字數 2200 閱讀 9668

核心思想:遞迴處理

前序:根左右

中序:左根右

後序:左右根

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在先的話是先序,在中間的話是中序,在最後的話是後序。先序的遍歷順序是根節點 左子...