二叉樹深度優先遍歷的多種寫法

2021-10-23 17:57:04 字數 1619 閱讀 9841

public

class

test

system.out.

println

(root.val)

;preorder

(root.left)

;preorder

(root.right);}

//遞迴中序

public

void

inorder

(node root)

preorder

(root.left)

; system.out.

println

(root.val)

;preorder

(root.right);}

//遞迴後序

public

void

postorder

(node root)

preorder

(root.left)

;preorder

(root.right)

; system.out.

println

(root.val);}

}class

node

時間複雜度:o(n)

空間複雜度:遞迴n層,每次的複雜度為1,所以總的空間複雜度為o(n)

引入master公式

//非遞迴前序遍歷

//思路,用棧來模擬系統棧,因為是先進後出,所以先進右節點,再進左節點

public

static

void

preorderiteration

(treenode head)

stack

stack =

newstack

<

>()

; stack.

push

(head)

;while

(!stack.

isempty()

)if(node.left != null)}}

//非遞迴的中序遍歷

public

void

inorderiteration

(node root)

//此時彈出的是當前最左邊的結點

node node = stack.

pop();

system.out.

println

(node)

;//如果有右子樹,則要處理右子樹的遍歷

if(node.right!=null)}}

//非遞迴後序遍歷

//利用兩個棧,把後序又弄成了先序的感覺

public

void

postorderiteration

(node root)

if(node.right!=null)

}while

(!stack2.

isempty()

)}

時間複雜度:由於每個節點都要進棧和出棧,所以時間複雜度為o(n)

空間複雜度:建立了輔助棧,所以空間複雜度為o(n)

深度優先遍歷二叉樹

3 深度優先遍歷二叉樹。include include include typedef struct treenode 樹節點結構體定義 treenode insertsbonmyleft treenode sb treenode insertsbonmyright treenode sb char...

二叉樹深度優先遍歷

在二叉樹的深度優先遍歷中分為前序遍歷 中序遍歷和後序遍歷,其中根據前序遍歷和中序遍歷或後序遍歷和中序遍歷可以推算出完整的二叉樹。三種遍歷方式為 前序遍歷 根節點 左子樹 右子樹 中序遍歷 左子樹 根節點 右子樹 後序遍歷 左子樹 右子樹 根節點 由上述三種遍歷方式可知中序遍歷最為重要,因為中序遍歷可...

二叉樹的深度優先遍歷

歡迎指正 今天繼續樹的遍歷。這裡要說的是 二叉樹的 深度優先遍歷。深度優先遍歷 從根結點開始,先遍歷根的左子樹,再遍歷根右子樹。以此類推輸出結果。如下圖 深度優先結果 5 3 1 4 7 9 分析 1 先將5入棧,此時棧中只有5乙個元素。2 將佔棧中的5彈棧,在將其右孩子7壓棧,此時棧中只有7乙個元...