public
static
class
treenode
public
static list
view
(treenode root, list
result)
result.
add(root.val)
;// 根
view
(root.left, result)
;// 左
// result.add(root.val);
view
(root.right, result)
;// 右
// result.add(root.val);
return result;
}
由根的訪問時機可以得到不同的遍歷順序,根左右為先序,左根右為中序,左右根為後序
public
static list
preinorder
(treenode root)
else
}return result;
}
入棧和左行之間訪問節點,得到的是先序出棧和右行之間訪問節點,得到的是中序
public
static list
postorder
(treenode root)
if(null != cur.right)
// 當前節點入主棧
stack.
push
(cur);}
while
(!stack.
isempty()
)return result;
}
從輔助棧取出乙個節點,依次將其左節點–>右節點壓入輔助棧,再將本身壓入主棧,迴圈至輔助棧空。最後從主棧取出,根據棧性質易知得到的是左–>右–>根的順序,即為後序。
public
static list
levelorder
(treenode root)
queue.
add(root.val)
;while
(!queue.
isempty()
)if(null != e.right)
}return result;
}
二叉樹的各種遍歷
二叉樹 struct treenode void createtree treenode root 樹遞迴先序遍歷 void preorder treenode root 現將根節點入棧,然後以棧空為條件不斷出棧,每齣棧乙個元素,將其右孩子壓入棧,左孩子壓入棧 void nonrecursionpr...
二叉樹及其各種遍歷
樹形結構是一類重要的非線性資料結構,其中以樹和二叉樹最為常用。二叉樹是每個結點最多有兩個子樹的有序樹。通常子樹的根被稱作 左子樹 left subtree 和 右子樹 right subtree 二叉樹常被用作二叉查詢樹和二叉堆或是二叉排序樹。二叉樹的每個結點至多只有二棵子樹 不存在度大於2的結點 ...
二叉樹 各種遍歷演算法
include include include using namespace std 二叉樹結點 typedef struct bitnodebitnode,bitree 按先序序列建立二叉樹 int createbitree bitree t else return 0 輸出 void visi...