https://leetcode.com/problems/binary-tree-inorder-traversal/
이진트리가 주어졌을때, 중위순회의 결과를 출력하는 문제이다.
중위순회는 left -> root -> right (왼쪽자식노드, 부모노드, 오른쪽자식노드) 순서대로 탐색하기때문에 재귀를 사용하여 풀었다.
1. 현재 노드가 null이 아니라면 먼저 가장 왼쪽의 자식노드를 계속해서 탐색한다.
2. 왼쪽자식을 모두 탐색했으면 현재 노드를 res 배열에 추가시킨다.
3. 그 다음으로 오른쪽노드를 탐색하는데 이때, 오른쪽 자식 기준으로 다시 왼쪽 노드 -> 부모 노드 -> 오른쪽 노드가 반복된다.
Java Code
/**
* 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> res = new ArrayList<>();
recursive(root, res);
return res;
}
private void recursive(TreeNode root, List<Integer> res){
if(root != null){
if(root.left != null){
recursive(root.left, res);
}
res.add(root.val);
if(root.right != null){
recursive(root.right, res);
}
}
}
}
Python Code
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
res = []
self.recursive(root, res)
return res
def recursive(self, root, res) -> List[int]:
if root:
self.recursive(root.left, res)
res.append(root.val)
self.recursive(root.right, res)
'Algorithm' 카테고리의 다른 글
[LeetCode] Python - 720. Longest Word in Dictionary (0) | 2021.06.25 |
---|---|
[LeetCode] Python - 98. Validate Binary Search Tree (0) | 2021.06.18 |
[LeetCode] Python - 648. Replace Words (0) | 2021.06.18 |
[LeetCode] Java - 6. ZigZag Conversion (0) | 2021.06.17 |
[LeetCode] Java - 64. Minimum Path Sum (DFS + DP 기본문제) (0) | 2021.06.12 |