복's

[ LeetCode - 94 ] Binary Tree Inorder Traversal 본문

알고리즘/LeetCode

[ LeetCode - 94 ] Binary Tree Inorder Traversal

나복이 2023. 11. 12. 22:48
728x90

https://leetcode.com/problems/binary-tree-inorder-traversal/

 

Binary Tree Inorder Traversal - LeetCode

Can you solve this real interview question? Binary Tree Inorder Traversal - Given the root of a binary tree, return the inorder traversal of its nodes' values.   Example 1: [https://assets.leetcode.com/uploads/2020/09/15/inorder_1.jpg] Input: root = [1,nu

leetcode.com

트리가 주어지고 중위 순회하며 요소를 출력하는 문제이다.

백준 같은 경우 실버정도 될 거 같은데 LeetCode의 easy가 실버정도인가

특징은 트리가 주어져서 만들어서 순회할 필요 없다.


[ 📌 풀이 ]

중위 순회는 left 노드로 계속 들어가 null이 나올 때 까지 훑어야 한다.

null이 나오면 중앙 노드를 훑고 right 노드를 훑어야 한다.

 

중위 순회를 하게되면 트리의 오름차순으로 요소를 조회할 수 있다.

 


[ 📌 코드 - Python ]

"""
# Author    : Lee In Bok 
# Date      : 2023.11.12(Sun)
# Spend Time: 08m 09s
# Runtime   : 34 ms (Beats 81.21%)
# Memory    : 16.3 MB (Beats 08.46%)
# Algoritm  : Tree
"""

class Solution:
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        ans = []

        def inorder(node: Optional[TreeNode]):
            #print(node.left, "    ", node.val)
            if node:
                if node.left:
                    inorder(node.left)
                ans.append(node.val)
                if node.right:
                    inorder(node.right)

        inorder(root)

[ 📌 다른 사람 숏 코드 - Python ]

class Solution:
    def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        def inorder(root):
            return  inorder(root.left) + [root.val] + inorder(root.right) if root else []

        return inorder(root)

파이썬 특성 덕분인지 배열끼리 더하는 연산이 가능해서 정말 짧고 쉬운 코드가 있었다.

[ 📌 코드 - Java ]

/**
* Author    : Lee In Bok 
* Date      : 2023.11.12(Sun)
* Spend Time: 08m 09s
* Runtime   : 0 ms (Beats 100%)
* Memory    : 41 MB (Beats 16.4%)
* Algoritm  : Tree
 */
 
class Solution {
    List<Integer> ans = new ArrayList();

    public List<Integer> inorderTraversal(TreeNode root) {
        inorder(root);

        return ans;
    }

    public void inorder(TreeNode root) {
        if(root == null){
            return;
        }

        inorder(root.left);
        ans.add(root.val);
        inorder(root.right);
    }
}

[ 📌 결과 - Python ]

[ Result - Python ]

[ 📌 결과 - Java ]

[ Result - Java ]

728x90