标签:类型 order result add 步骤 方法 bin 返回值 分治
public ArrayList<Integer> preorderTraversal(TreeNode root) { // write your code here Stack<TreeNode> stack = new Stack<TreeNode>(); //找一个容器进行存储 ArrayList<Integer> preorder = new ArrayList<Integer>(); //特殊情况的考虑 if (root == null) { return preorder; } //利用栈的特性, 每次出一个,进俩子树,先进右后出右 //栈 非空时表示没有遍历完. //一个节点进站出站一次,没有多余的循环,因此时间复杂度为O(n) stack.push(root); while (!stack.empty()) { TreeNode node = stack.pop(); preorder.add(node.val); if (node.right != null) { stack.push(node.right); } if (node.left != null) { stack.push(node.left); } } return preorder; }
public ArrayList<Integer> preorderTraversal(TreeNode root) { //返回值类型 ArrayList<Integer> result = new ArrayList<Integer>(); //调用递归函数 traverse(root, result); //求得返回值 return result; } //递归函数没有返回值因此将结果作为参数 private void traverse(TreeNode root, ArrayList<Integer> result) { //递归出口 if (root == null) { return; } //根据要求操作节点进入返回值的结果 或 容器 result.add(root.val); //递归左右子树 traverse(root.left, result); traverse(root.right, result); }
public ArrayList<Integer> preorderTraversal(TreeNode root) { //定义结果返回类型 ArrayList<Integer> result = new ArrayList<Integer>(); //递归出口 if(root == null) { //返回结果类型 return result; } //Divide //将左右子树分别加入结果 ArrayList<Integer> left = preorderTraversal(root.left); ArrayList<Integer> right = preorderTraversal(root.right); //conquer: 分情况讨论 //根据要求操作节点进入结果 result.add(root.val); //操作左子树和右子树 result.addAll(left); result.addAll(right); //返回结果 return result; }
分治法的步骤, 递归出口, 先分-> 操作, 再合->操作, 返回
Binary tree preorder traversal
标签:类型 order result add 步骤 方法 bin 返回值 分治
原文地址:http://www.cnblogs.com/apanda009/p/7237024.html