标签:
题目:
连接: http://leetcode.com/problems/binary-tree-preorder-traversal/
题解:
二叉树先序遍历, root -> left -> right。使用一个栈来维护已经访问过的节点。当root不为空时,当前节点入栈,输出节点值,继续向左子树遍历。当root为空,从栈中弹出节点,向右子树进行遍历。
Iterative:
Time Complexity - O(n), Space Complexity - O(n)。
public class Solution { public ArrayList<Integer> preorderTraversal(TreeNode root) { ArrayList<Integer> result = new ArrayList<Integer>(); if(root == null) return result; Stack<TreeNode> stack = new Stack<TreeNode>(); while(root != null || !stack.isEmpty()){ if(root != null){ stack.push(root); result.add(root.val); root = root.left; } else { root = stack.pop(); root = root.right; } } return result; } }
Recursive:
Time Complexity - O(n), Space Complexity - O(n)。
public class Solution { public ArrayList<Integer> preorderTraversal(TreeNode root) { ArrayList<Integer> result = new ArrayList<Integer>(); if(root == null) return result; helper(result, root); return result; } private void helper(ArrayList<Integer> result, TreeNode root){ if(root == null) return; result.add(root.val); helper(result, root.left); helper(result, root.right); } }
Morris-Travel:
测试:
144. Binary Tree Preorder Traversal
标签:
原文地址:http://www.cnblogs.com/yrbbest/p/4483758.html