天天看點

LeetCode刷題進階之二叉樹的中序周遊(94)

一、題目

LeetCode刷題進階之二叉樹的中序周遊(94)

示範示例:

LeetCode刷題進階之二叉樹的中序周遊(94)
LeetCode刷題進階之二叉樹的中序周遊(94)

二、測試代碼

//方法一 遞歸
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> list=new ArrayList<>();
        inorder(list,root);
    return list;
        
    }
    public void inorder( List<Integer> list,TreeNode root){
        if(root==null){
            return;
        }
        if(root.left!=null){
            inorder(list,root.left);
        }
        list.add(root.val);
        if(root.right!=null){
            inorder(list,root.right);
        }
    }
}

//方法二 非遞歸(疊代)
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> list=new ArrayList<>();
        Stack<TreeNode> stack=new Stack<>();
        TreeNode temp=root;
        while(temp!=null||!stack.isEmpty()){
            while(temp!=null){
                stack.push(temp);
                temp=temp.left;
            }
            if(!stack.isEmpty()){
                temp=stack.pop();
                list.add(temp.val);
                temp=temp.right;
            }
        }
    return list; 
    }
}
           

三、運作情況

方法一:

LeetCode刷題進階之二叉樹的中序周遊(94)

方法二:

LeetCode刷題進階之二叉樹的中序周遊(94)

傳送門:二叉樹的周遊(先/前序周遊、中序周遊和後序周遊)