標籤:二叉樹 遍曆 演算法 面試 java
【144-Binary Tree Preorder Traversal(二叉樹非遞迴前序走訪)】
【LeetCode-面試演算法經典-Java實現】【所有題目目錄索引】
原題
Given a binary tree, return the preorder traversal of its nodes’ values.
For example:
Given binary tree {1,#,2,3},
1 2 / 3
return [1,2,3].
Note: Recursive solution is trivial, could you do it iteratively?
題目大意
給定一個二叉樹,輸出前序走訪的結果,嘗試使用兩種方法實現
解題思路
第一種:使用遞迴方式。
第二種:使用非遞迴的方法
代碼實現
結點類
public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}
第一種方法:演算法實作類別
import java.util.LinkedList;import java.util.List;public class Solution { private List<Integer> result; public List<Integer> preorderTraversal(TreeNode root) { result = new LinkedList<>(); preOrder(root); return result; } private void preOrder(TreeNode root) { if (root != null) { result.add(root.val); preOrder(root.left); preOrder(root.right); } }}
第二種方法:演算法實作類別
public class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> result = new LinkedList<>(); if (root != null) { Deque<TreeNode> stack = new LinkedList<>(); stack.add(root); while (!stack.isEmpty()) { TreeNode node = stack.removeLast(); result.add(node.val); if (node.right != null) { stack.add(node.right); } if (node.left != null) { stack.add(node.left); } } } return result; }}
評測結果
點擊圖片,滑鼠不釋放,拖動一段位置,釋放後在新的視窗中查看完整圖片。
第一種方法結果:
第一種方法結果:
特別說明
歡迎轉載,轉載請註明出處【http://blog.csdn.net/derrantcm/article/details/47774643】
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
【LeetCode-面試演算法經典-Java實現】【144-Binary Tree Preorder Traversal(二叉樹非遞迴前序走訪)】