LeetCode 94 Binary Tree Inorder Traversal (中序遍历二叉树)

来源:互联网 发布:java 密码加密解密 编辑:程序博客网 时间:2024/05/29 18:00

Given a binary tree, return the inorder traversal of its nodes' values.

For example:
Given binary tree [1,null,2,3],

   1    \     2    /   3

return [1,3,2].

Note: Recursive solution is trivial, could you do it iteratively?


题目链接:https://leetcode.com/problems/binary-tree-inorder-traversal/

题目分析:中序遍历二叉树,递归的方法简单明了,不多说了

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    void DFS(TreeNode root, List<Integer> ans) {        if(root == null) {            return;        }        DFS(root.left, ans);        ans.add(root.val);        DFS(root.right, ans);    }        public List<Integer> inorderTraversal(TreeNode root) {        List<Integer> ans = new ArrayList<>();        DFS(root, ans);        return ans;    }}

下面是非递归的做法,用一个栈模拟递归的过程,中序遍历的顺序是 左->中->右,先一直走到最左端,取值后pop,这个过程其实完成了左->中的遍历,每次pop后再往右走,这样就完成了左->中->右的遍历

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    public List<Integer> inorderTraversal(TreeNode root) {        List<Integer> ans = new ArrayList<>();        Stack<TreeNode> stack = new Stack<>();        while(root != null || !stack.empty()) {            while(root != null) {                stack.push(root);                root = root.left;            }            if(!stack.empty()) {                root = stack.peek();                stack.pop();                ans.add(root.val);                root = root.right;            }        }        return ans;    }}


1 0
原创粉丝点击