zoukankan      html  css  js  c++  java
  • 【LeetCode-面试算法经典-Java实现】【144-Binary Tree Preorder Traversal(二叉树非递归前序遍历)】

    【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

  • 相关阅读:
    Python 虚拟环境(VirtualEnv)
    python 枚举
    Python 面向对象编程
    Python 使用模块
    Python 函数
    Python dict & set
    JAVA-工具类
    09-12 练习题
    JAVA-数组
    java-语句
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/6972092.html
Copyright © 2011-2022 走看看