二叉樹後續遍歷的幾種方式

2022-03-27 00:32:50 字數 1194 閱讀 1193

資料結構定義:

// definition for a binary tree node.

public class treenode

treenode(int val)

treenode(int val, treenode left, treenode right)

}

遞迴寫法:
class solution 

}

普通迭代:
class solution 

if((node=stack.peek()).right == null

|| node.right == pre)else

}return result;

}}

//思路:

//前序遍歷的過程是:(根-左-右)

//那麼我們遍歷的過程變為:(根-右-左),最後的結果再進行下倒置

//順序就變成了:(左-右-根),完成對後序的遍歷

class solution

stackstack = new stack<>();

treenode node =root;

while(!stack.isempty() || node != null)

node = stack.pop().left;

}collections.reverse(result);

return result;

}}

莫里斯遍歷:
//還是借鑑前序遍歷的思路,莫里斯遍歷可參看我的中序遍歷一文

class solution

treenode node =root,pre = null;

while(node != null)else

if(pre.left == null)else}}

collections.reverse(result);

return result;

}

借鑑頭指標插入法:
class solution 

stack.addfirst(root);

while(!stack.isempty())

if(node.right != null)

}return result;

}}

二叉樹幾種遍歷方式

一 基本概念 每個結點最多有兩棵子樹,左子樹和右子樹,次序不可以顛倒。性質 1 非空二叉樹的第n層上至多有2 n 1 個元素。2 深度為h的二叉樹至多有2 h 1個結點。滿二叉樹 所有終端都在同一層次,且非終端結點的度數為2。在滿二叉樹中若其深度為h,則其所包含的結點數必為2 h 1。完全二叉樹 除...

二叉樹遍歷方式

先序遍歷 根 左子樹 右子樹 遞迴版本 public static void preprint treenode root 非遞迴版本 public static void preorder treenode root if s.empty 中序遍歷 左子樹 根 右子樹 遞迴版本 public st...

二叉樹應用 二叉搜尋樹的後續遍歷序列

題目 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷序列的結果。假設輸入的陣列的任意兩個數字都互不相同。分析 在二叉搜尋樹的後序遍歷中,根節點在最後面。前面的序列可以分為兩個部分 乙個為左子樹,小於根節點的值 乙個為右子樹,大於根節點的值。左子樹序列和右子樹序列同樣應該為後序遍歷序列,則可...