【总结】二叉树的前、中、后序遍历的递归实现与非递归JAVA实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/majichen95/article/details/82216949

一、二叉树的前序遍历

1、递归实现:

public List<Integer> preorderTraversal(TreeNode root) {
        // write your code here
        List<Integer> list = new ArrayList<>();
        
        preorderTraversal(root , list);
        
        return list;
    }
    
    public void preorderTraversal(TreeNode root , List<Integer> list){
        if(root == null)
            return;
        
        list.add(root.val);
        preorderTraversal(root.left , list);
        preorderTraversal(root.right , list);
    }

2、非递归实现,利用栈

public List<Integer> preorderTraversal(TreeNode root) {
        // write your code here
        List<Integer> list = new ArrayList<>();
        if(root == null)
            return list;
            
        Stack<TreeNode> stack = new Stack<>();
        stack.push(root);
        
        while(!stack.isEmpty()){
            TreeNode node = stack.pop();
            list.add(node.val);
            
            //注意这里先压右栈,再压左栈,与前序遍历相反
            if(node.right != null)
                stack.push(node.right);
            if(node.left != null)
                stack.push(node.left);
        }
        
        return list;
    }

二、二叉树的中序遍历

1、递归实现

public List<Integer> inorderTraversal(TreeNode root) {
        // write your code here
        List<Integer> list = new ArrayList<>();
        
        inorderTraversal(root , list);
        
        return list;
    }
    
    public void inorderTraversal(TreeNode root , List<Integer> list){
        if(root == null)
            return;
        
        inorderTraversal(root.left , list);
        list.add(root.val);
        inorderTraversal(root.right , list);
    }

2、非递归实现

猜你喜欢

转载自blog.csdn.net/majichen95/article/details/82216949