前序(先序):根 左 右
中序:左 根 右
後續:左 右 根
public
static
void
preorder
(node root)
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+
" ")
;}
思想:
//結點個數等於根節點+左子樹的節點個數+右子樹的節點個數
return1+
size
(root.left)
+size
(root.right)
;}
//遍歷樹,將問題拆分成求root.left的葉子節點個數+root.right的葉子節點個數
public
static
intleftsize
(node root)
if(root.left==null&&root.right==null)
return
leftsize
(root.left)
+leftsize
(root.right)
;}
//如果k<1,只能是空樹,直接返回0
//如果k==1;說明只有乙個根節點,返回1
//第k層的節點個數=左子樹的k-1層節點個數+右子樹的(k-1)節點個數
public
static
intklevelsize
(node root,
int k)
if(k==1)
return
klevelsize
(root.left,k-1)
+klevelsize
(root.right,k-1)
;}
//如果找到了返回引用,如果不存在返回null
node find
(node root,
int val)
if(root.val==val)
node result=
find
(root.left,val);if
(result!=null)
return
find
(root.right,val)
;}
class
node
}public
class
testtree
二叉樹的前中後序 層序遍歷以及重建
class treenode def init self,x self.val x self.left none self.right none根 左 右,前中後都是指的是根,左右的關係永遠是先左後右 1 遞迴方法 這個是通用寫法,對於中序和後序,僅需稍微調整一下 詳情看後面 def preord ...
二叉樹的四種遍歷(先中後序,層次遍歷)
先序遍歷 preorder 的操作過程如下 若二叉樹為空,則什麼也不做 若二叉樹非空 typedef struct bitnodebitnode,bitree 先序遍歷 void preorder bitree t 中序遍歷 inorder 的操作過程如下 若二叉樹為空,則什麼也不做 若二叉樹非空 ...
二叉樹的遍歷(前,中,後,層序)
二叉樹的遍歷是指從根節點出發,按照某種次序依次訪問二叉樹中所有節點,使得每個節點僅被訪問一次 前序遍歷 若二叉樹為空,則空操作返回,否則先訪問根節點,然後前序遍歷左子樹,再前序遍歷右子樹。結果是 abdghceif 中序遍歷 若樹為空,則空操作返回,否則從根節點開始 注意並不是先訪問根節點 中序遍歷...