LeedCode二叉树中序遍历

题目

给定一个二叉树,返回它的中序 遍历。

示例:

输入: [1,null,2,3]

  1

    \

    2

    /

  3

输出: [1,3,2]

进阶: 递归算法很简单,你可以通过迭代算法完成吗?

来源:力扣(LeetCode)

链接:https://leetcode-cn.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; }

* }

*/

//递归

class Solution {

    public List<Integer> inorderTraversal(TreeNode root) {

        List<Integer> ret = new ArrayList<>();

        if(root==null){

            return ret;

        }

        dfs(root,ret);

        return ret;

    }

    private void dfs(TreeNode node,List<Integer> ret){

        if(node.left!=null){

            dfs(node.left,ret);

        }

        ret.add(node.val);

        if(node.right!=null){

            dfs(node.right,ret);

        }      

    }

}


//迭代

class Solution {

    public List<Integer> inorderTraversal(TreeNode root) {

        List<Integer> ret = new ArrayList<>();

        LinkedList<TreeNode> nodes = new LinkedList<>();

        while(root!=null||!nodes.isEmpty()){

            while(root!=null){

                nodes.push(root);

                root = root.left;

            }

            root = nodes.pop();

            ret.add(root.val);

            root = root.right;

        }

        return ret;

    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。