preOrder 二叉树先序遍历 144. Binary Tree Preorder Traversal

慢慢练脑子

留意下非递归方法,存stack前先检测下是否为null

1. 来源:

题: leetcode

2. 解法:

2.1 递归

class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        helper(root, result);
        
        return result;
    }
    
    private void helper(TreeNode root, List<Integer> result) {
        
        if(root == null) {
            return;
        }
        
        result.add(root.val);
        helper(root.left, result);
        helper(root.right, result);
        
    }
}

2.1 非递归

class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        
        List<Integer> result = new ArrayList<>();
        
        Stack<TreeNode> nodeStack = new Stack<>();
        if(root == null) {
            return result;
        }
        
        nodeStack.add(root);
        while(!nodeStack.isEmpty()) {
            TreeNode top = nodeStack.pop();
            
            result.add(top.val);
            if(top.right != null) {  // 先push右,再push做
                nodeStack.push(top.right);
            }
            if(top.left != null) {
                nodeStack.push(top.left);
            }
        }
        
        return result;
        
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容