二叉樹的遍歷(前序,中序,後序,層次)

2021-10-12 17:33:30 字數 2721 閱讀 2712

圖示前序遍歷

中序遍歷

後序遍歷

層次遍歷

先序遍歷

順序:根節點–>左子樹–>右子樹

中序遍歷

順序:左子樹–>根節點–>右子樹

後序遍歷

順序:左子樹–>右子樹–>根節點

層次遍歷

順序:按照層次遍歷

根節點->左子樹->右子樹

利用棧的思想:

如果沒有右節點,我們將會繼續出棧,繼續訪問新出棧的右節點。

如果有右節點,將會重複以上操作(繼續往左遍歷)

問題:利用前序演算法

/**

* definition for a binary tree node.

* public class treenode

* treenode(int val)

* treenode(int val, treenode left, treenode right)

* }*/class

solution

//檢視右子樹,出棧表示這個結點已經遍歷了左子樹和即將遍歷右子樹

//也就是不會在對tem這個結點進行操作了

treenode tem=stack.

pop();

node=tem.right;

}return list;

}}

class

solution

public

static

void

pp(treenode node, list

list)

}

左子樹–>根節點–>右子樹

利用棧的思想:

如果沒有右節點,我們將會繼續出棧,繼續訪問新出棧的右節點。

如果有右節點,將會重複以上操作(繼續往左遍歷)

/**

* definition for a binary tree node.

* public class treenode

* treenode(int val)

* treenode(int val, treenode left, treenode right)

* }*/class

solution

treenode node= stack.

pop();

list.

add(node.val)

; tem=node.right;

}return list;

}}

class

solution

public

static

void

pp(treenode node, list

list)

}

左子樹–>右子樹–>根節點

利用棧的思想:

當右子樹遍歷完成遍歷完成,我們才出棧且記錄根節點也就是相關與這個結點的操作我們已經完成

如果沒有右節點或者右節點遍歷完成記錄該節點,我們將出棧,繼續訪問新出棧節點的右節點。

如果有右節點,將會重複以上操作(繼續往左遍歷)

/**

* definition for a binary tree node.

* public class treenode

* treenode(int val)

* treenode(int val, treenode left, treenode right)

* }*/class

solution

deque

stack =

newlinkedlist

(); treenode visited=null;

while

(root != null ||

!stack.

isempty()

) root = stack.

pop();

//此處判斷是否有右子樹

//如果有右子樹且右子樹未遍歷,就將根節點入棧,遍歷右子樹

//否則記錄節點

if(root.right == null||root.right==visited )

else

}return res;

}}

class

solution

public

static

void

pp(treenode node, list

list)

}

層序遍歷是典型的廣度優先演算法,利用佇列的思想可以解決。

/**

* definition for a binary tree node.

* public class treenode

* }*/class

solution

if(tem.right!=null)

} list.

add(list2);}

return list;

}}

二叉樹前序 中序 後序 層次遍歷

分別用了三種不同的方法實現了二叉樹的前序遍歷。1 include2 include3 using namespace std 4struct btreenode 11 12void preorder btreenode t 19 20 21void preorder btreenode t 34 3...

二叉樹前序 中序 後序 層次遍歷

分別用了三種不同的方法實現了二叉樹的前序遍歷。1 include2 include3 using namespace std 4struct btreenode 11 12void preorder btreenode t 19 20 21void preorder btreenode t 34 3...

二叉樹遍歷(前序,中序,後序

二叉樹的遍歷有三種方式,如下 1 前序遍歷 dlr 首先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。簡記根 左 右。2 中序遍歷 ldr 首先遍歷左子樹,然後訪問根結點,最後遍歷右子樹。簡記左 根 右。3 後序遍歷 lrd 首先遍歷左子樹,然後遍歷右子樹,最後訪問根結點。簡記左 右 根。例1 如上圖...