(利用栈实现非递归)Leetcode 二叉树的中序遍历 java

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-22 19:39   26   0

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

示例:

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

输出: [1,3,2]

法一 递归法

理解: List.addAll()

成功

显示详情

执行用时 : 2 ms, 在Binary Tree Inorder Traversal的Java提交中击败了49.67% 的用户

内存消耗 : 34.2 MB, 在Binary Tree Inorder Traversal的Java提交中击败了59.14% 的用户

/**
 * 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> res = new ArrayList<Integer>();
        if(root == null)
            return res;
        res.addAll(inorderTraversal(root.left) );
        res.add(root.val);
        res.addAll(inorderTraversal(root.right) );
        return res;
    }
}

法二,非递归,利用栈结构

(当-while, 若-if )

当前节点从根节点开始。

当前节点不为空或栈不空

当前节点不为空时,当前节点入栈,判断其是否有左节点。若有当前节点置为左节点,继续当前这一步;若无,则进行下一步。

栈不为空,出栈,并将当前元素置为该出栈元素的右节点。

成功

显示详情

执行用时 : 2 ms, 在Binary Tree Inorder Traversal的Java提交中击败了49.67% 的用户

内存消耗 : 34 MB, 在Binary Tree Inorder Traversal的Java提交中击败了71.52% 的用户

/**
 * 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> res = new ArrayList<Integer>();
        List<Integer> res = new ArrayList<>();
        if(root == null)
            return res;
        //Stack<TreeNode> tmp = new Stack<TreeNode>();
        Stack<TreeNode> tmp = new Stack<>();
        TreeNode cur = root;
        while(cur!=null || !tmp.empty() ){
            while(cur != null){
                tmp.push(cur);
                cur = cur.left;
            }
            if(!tmp.empty() ){
                cur = tmp.pop();
                res.add(cur.val);
                cur = cur.right;
            }
        }
        return res;
    }
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP