先序遍歷:根------左子樹-------右子樹
遞迴版本
publicstatic
void
preprint(treenode root)
非遞迴版本
publicstatic
void
preorder(treenode root)
if (!s.empty())
}}
中序遍歷:左子樹-----根-----右子樹
遞迴版本
publicstatic
void
inprint(treenode root)
非遞迴版本
publicstatic
void
inorder(treenode root)
if (!s.empty())
}}
後序遍歷:左子樹-----右子樹-----根
遞迴版本
publicstatic
void
postprint(treenode root)
非遞迴版本
後序遍歷的非遞迴應該比前面兩種遍歷的非遞迴要複雜些,當然這裡我們還是需要借助棧來實現。由於後序遍歷是左-----右-----根,所以在入棧的時候,應該倒著放,也就是根-----右-----左,這樣當出棧的時候才能保證正確的順序。入棧我們知道了,出棧的時候應該什麼時候出呢?兩種情況:1、如果當前棧頂左右孩子都為null,2、如果上乙個出棧的元素是當前棧頂元素的孩子結點。所以我們需要定義乙個變數用來執行上乙個出棧的節點。
publicstatic
void
postorder(treenode root)
else
}}
層序遍歷:從最上面根那層開始,依次從上往下,從左往右遍歷。
publicstatic
void
levelprint(treenode root)
}
posted @
2018-08-16 08:54
neu_張康 閱讀(
...)
編輯收藏
二叉樹幾種遍歷方式
一 基本概念 每個結點最多有兩棵子樹,左子樹和右子樹,次序不可以顛倒。性質 1 非空二叉樹的第n層上至多有2 n 1 個元素。2 深度為h的二叉樹至多有2 h 1個結點。滿二叉樹 所有終端都在同一層次,且非終端結點的度數為2。在滿二叉樹中若其深度為h,則其所包含的結點數必為2 h 1。完全二叉樹 除...
二叉樹遍歷方式彙總
include using namespace std struct bitreenode bitreenode init tree vector nums else return root void pre order r bitreenode root void in order r bitre...
構建二叉樹 遍歷二叉樹
陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...