【LeetCode】Binary Tree Postorder Traversal 二叉樹後序遍歷遞迴以及非遞迴演算法
Total Accepted: 15614 Total Submissions: 50928 My Submissions
Given a binary tree, return the postorder traversal of its nodes' values.
For example:
Given binary tree
{1,#,2,3}
,1 \ 2 / 3return
[3,2,1]
.Note: Recursive solution is trivial, could you do it iteratively?
【解題思路】
1、遞迴 左右中
Java AC
2、非遞迴/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { private ArrayList<Integer> list; public ArrayList<Integer> postorderTraversal(TreeNode root) { list = new ArrayList<Integer>(); postOrder(root); return list; } private void postOrder(TreeNode root){ if(root == null){ return; } postOrder(root.left); postOrder(root.right); list.add(root.val); } }
1)、需要先查詢到當前節點的最左孩子,也就是一直入棧。
2)、假設到node時,左孩子為空了,這個時候出棧,棧頂元素就是當前節點node。
3)、判斷棧頂元素是否為空,如果為空,說明可以直接訪問根節點了,直接加入list中。
4)、如果不為空,說明需要訪問右孩子,這個時候,注意將當前節點元素new一個出來,同時入棧,這一步其實是儲存根節點值的。再回到1)重複處理,直到棧為空。
Java AC
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { private ArrayList<Integer> list; public ArrayList<Integer> postorderTraversal(TreeNode root) { list = new ArrayList<Integer>(); postOrder(root); return list; } private void postOrder(TreeNode root){ Stack<TreeNode> stack = new Stack<TreeNode>(); while(root != null || !stack.isEmpty()){ while(root != null){ stack.push(root); root = root.left; } while(!stack.isEmpty()){ root = stack.pop(); if(root.right != null){ stack.push(new TreeNode(root.val)); root = root.right; break; } list.add(root.val); if (stack.isEmpty()) { return; } } } } }
相關推薦
【LeetCode】Binary Tree Postorder Traversal 二叉樹後序遍歷遞迴以及非遞迴演算法
Total Accepted: 15614 Total Submissions: 50928 My Submissions Given a binary tree, return the postorder traversal of its nodes' values.
【LeetCode】Binary Tree Inorder Traversal 二叉樹中序遍歷遞迴以及非遞迴演算法
Total Accepted: 16494 Total Submissions: 47494 Given a binary tree, return the inorder traversal of its nodes' values. For example: Giv
【LeetCode】Binary Tree Preorder Traversal 二叉樹前序遍歷遞迴以及非遞迴演算法
Total Accepted: 17403 Total Submissions: 50093 My Submissions Given a binary tree, return the preorder traversal of its nodes' values.
【LeetCode】144. Binary Tree Preorder Traversal 二叉樹先序遍歷的非遞迴實現
題目: 翻譯:給定一個二叉樹,返回先序遍歷的序列。 分析:二叉樹的先序遍歷、中序遍歷及後序遍歷演算法是資料結構中最基礎的遍歷演算法。 先序遍歷:先訪問根節點的資料,再訪問左孩子節點的資料,最後訪問右孩子節點的資料。圖中例子先序遍歷輸出的序列為:【
binary-tree-inorder-traversal——二叉樹中序遍歷
str () init inorder code while urn value public Given a binary tree, return the inordertraversal of its nodes‘ values. For example:Given
Leetcode 94. Binary Tree Inorder Traversalt (二叉樹中序遍歷)
原題 Given a binary tree, return the inorder traversal of its nodes’ values. Example: Input: [1,null,2,3] 1 \ 2 / 3 Output
【LeetCode】Binary Tree Postorder Traversal
Given a binary tree, return the postorder traversal of its nodes' values. Example: Input: [1,null,2
[LeetCode] Binary Tree Postorder Traversal 二叉樹的後序遍歷
Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary tree {1,#,2,3}, 1 \ 2 /
LeetCode 94.Binary Tree Inorder Traversal (二叉樹的中序遍歷)
題目描述: 給定一個二叉樹,返回它的中序 遍歷。 示例: 輸入: [1,null,2,3] 1 \ 2 / 3 輸出: [1,3,2] 進階: 遞迴演算法很簡單,你可以通過迭代演算法完成嗎? AC C++ Solution
[LeetCode] Binary Tree Level Order Traversal 二叉樹層序遍歷
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level). For example:Given binary tree {3,9
Binary Tree Postorder Traversal 非遞迴實現二叉樹後序遍歷
Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary tree {1,#,2,3}, 1 \ 2 / 3 return
LeetCode 94. Binary Tree Inorder Traversal 二叉樹的中序遍歷 C++
壓入 rsa return recursive 使用 rdquo push cto 方法 Given a binary tree, return the inorder traversal of its nodes‘ values. Example: Input:
LeetCode 144. Binary Tree Preorder Traversal 二叉樹的前序遍歷 C++
do it emp 二叉 c++ pre value code val right Given a binary tree, return the preorder traversal of its nodes‘ values. Example: Input: [1
LeetCode Hard 145 二叉樹後序遍歷 Python
def postorderTraversal(self, root): """ 記住得了= = 就訪問當前root,然後左子樹入棧,右子樹入棧,最後逆序一下就好了,return output[::-1] 相當於是這麼個思路: 目標:左右根
leetcode 145+590 二叉樹後序遍歷(iterative)(附589,144,94)
題目描述 145. Binary Tree Postorder Traversal Given a binary tree, return the postorder traversal of its nodes' values. Example: Input: [1,nu
二叉樹後序遍歷--遞歸與非遞歸實現
eno oid imp array ins hashmap nod package 實現 package tree; import java.util.ArrayList; import java.util.HashMap; import java.util.List;
二叉樹後序遍歷非遞迴實現(java)
後序遍歷:雙棧法,和層次遍歷(雙佇列)很相似,唯一區別在於層次遍歷用的 是佇列,後序遍歷用的是棧。 public static void posOrderUnRecur1(Node head){ System.out.print("PosOrder:"); if(head !=
後序遍歷二叉樹(關鍵詞:樹/二叉樹/後序遍歷/後根遍歷/後序搜尋/後根搜尋)
後序遍歷二叉樹 遞迴演算法 def postorderTraversal(root): f = postorderTraversal return f(root.left) + f(root.right) + [root.val] if root is not None el
二叉樹--後序遍歷的非遞迴演算法
後續遍歷關鍵在於,當節點的 右子樹存在且被訪問後 或者是 右子樹為空 才能訪問自身。 在遍歷過程中,先將節點從的左孩子到最左節點壓棧, 設定標誌變數 flag 來判斷是否訪問過左孩子, pre指標來指向先前訪問過的節點。 所有左孩子壓棧後, 最後一個節點的左孩子為空,已被訪問p = NULL , 令f
二叉樹後序遍歷(遞迴與非遞迴)演算法及C語言實現
二叉樹後序遍歷的實現思想是:從根節點出發,依次遍歷各節點的左右子樹,直到當前節點左右子樹遍歷完成後,才訪問該節點元素。 圖 1 二叉樹 如圖 1 中,對此二叉樹進行後序遍歷的操作過程為: 從根節點 1 開始,遍歷該節點的左子樹(以節點 2 為根節點); 遍歷節點 2 的左子樹(以節點 4 為根