94.二叉樹的中序遍歷
二叉樹的中序遍歷題目鏈接
- 中序遍歷:左節點->頭節點->右節點
- 方法一:遞歸法,很簡單直接按中序遍歷順序寫
List<Integer> results = new ArrayList<>();
public List<Integer> inorderTraversal(TreeNode root) {
if(root==null){
return results;
}
inorderTraversal(root.left);
results.add(root.val);
inorderTraversal(root.right);
return results;
}
- 方法二:迭代法
- 先去找頭節點最左邊的葉子節點,再這個過程用棧來存儲沒利用到的節點,找到最左邊的葉子節點後,棧中彈出它,它是一個"頭節點",那麼現在我們需要訪問它的"右節點",如果有就去訪問這個節點下的最左邊的葉子節點,重複上邊步驟,如果“右節點”不存在就讓棧彈出棧頂元素進行下一輪的遍歷
List<Integer> results;
public List<Integer> inorderTraversal(TreeNode root) {
results = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
TreeNode p = root;
while(p!=null||!stack.isEmpty()){
while(p!=null){
stack.push(p);
p=p.left;
}
if(!stack.isEmpty()){
p=stack.pop();
results.add(p.val);
p=p.right;
}
}
return results;
}