[LeetCode] Binary Tree Inorder Traversal

2021. 3. 11. 13:03·코딩테스트
728x90

leetcode.com/explore/interview/card/top-interview-questions-medium/108/trees-and-graphs/786/

 

 

이진 트리!!!! 이론을 공부해도 코드로 구현하기는 녹록치 않다 💬

30분동안 푼 내용..문제 해석하느라 정신이 없었다.

노드를 순회하는 순서와 재귀함수를 써서 반복해야 하는것은 알았지만 코드 정리가 안되고 헤매는 모습😅

메서드를 새로 생성해도 된다는 생각을 못하고 해당 메서드 안에서만 풀려고하니까 이래저래 더 꼬인듯하다.

public class BinaryTree0310 {

	public List<Integer> inorderTraversal(TreeNode root) {
		//순서대로 처음에 들어오는 root가 루트노드
		//그 다음이 left
		//그 다음이 right
		//반복
		List<Integer> list = new ArrayList<Integer>();
		if(root!=null) {
			//첫번째 배열 정렬
			list.add(root.val);

			//해당 루트로 새로 세팅 (?) 어디에서 세팅해야할까
			TreeNode tree = new TreeNode(root.val);

		}else if(root==null) {

		}

		//중위순회는 left - root - right 순으로 순회
		//root가 정해질 때마다 왼쪽 값 있는지 확인
		//있으면 먼저 정렬


		return list;
	}

}

 

결국 정답을 보고 이해해보기로 했다.

 

Pseudocode (수도코드)

inorder (node)
if node = null then return
inorder (node.left)
visit (node)
inorder (node.right)

➡ O(N0 한번 씩 모두 방문

 

class Solution {
    public List < Integer > inorderTraversal(TreeNode root) {
        List < Integer > res = new ArrayList < > ();
        helper(root, res);
        return res;
    }

    public void helper(TreeNode root, List < Integer > res) {
        if (root != null) {
            if (root.left != null) {
                helper(root.left, res);
            }
            res.add(root.val);
            if (root.right != null) {
                helper(root.right, res);
            }
        }
    }
}

 

스택을 활용해서 푸는 방법도 있었다.

public class Solution {
    public List < Integer > inorderTraversal(TreeNode root) {
        List < Integer > res = new ArrayList < > ();
        Stack < TreeNode > stack = new Stack < > ();
        TreeNode curr = root;
        while (curr != null || !stack.isEmpty()) {
            while (curr != null) {
                stack.push(curr);
                curr = curr.left;
            }
            curr = stack.pop();
            res.add(curr.val);
            curr = curr.right;
        }
        return res;
    }
}

 

메서드를 만들지 않고 푸는 법

class Solution {
    public List < Integer > inorderTraversal(TreeNode root) {
        List < Integer > res = new ArrayList < > ();
        TreeNode curr = root;
        TreeNode pre;
        while (curr != null) {
            if (curr.left == null) {
                res.add(curr.val);
                curr = curr.right; // move to next right node
            } else { // has a left subtree
                pre = curr.left;
                while (pre.right != null) { // find rightmost
                    pre = pre.right;
                }
                pre.right = curr; // put cur after the pre node
                TreeNode temp = curr; // store cur node
                curr = curr.left; // move cur to the top of the new tree
                temp.left = null; // original cur left be null, avoid infinite loops
            }
        }
        return res;
    }
}

 

728x90
저작자표시 비영리 동일조건 (새창열림)

'코딩테스트' 카테고리의 다른 글

[LeetCode] 13. Roman to Integer  (3) 2021.03.12
[LeetCode] 112. Path Sum  (1) 2021.03.11
[LeetCode] 509. Fibonacci Number (JAVA)  (0) 2021.03.08
How the DNS works  (2) 2021.03.07
[Codility] BinaryGap (JAVA)  (1) 2021.02.26
'코딩테스트' 카테고리의 다른 글
  • [LeetCode] 13. Roman to Integer
  • [LeetCode] 112. Path Sum
  • [LeetCode] 509. Fibonacci Number (JAVA)
  • How the DNS works
heestory217
heestory217
Done is better than Perfect! 좌충우돌 개발일지💻
    250x250
  • heestory217
    Heello World
    heestory217
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • 컴퓨터일반 (0)
      • WEB (1)
      • JAVA (3)
      • Python (9)
      • C (1)
      • DataBase (17)
        • Oracle (2)
        • MySQL (9)
        • SAP HANA (4)
        • PostgreSQL (0)
      • 디버깅∕오류해결 (14)
      • 코딩테스트 (54)
        • 자료구조∕알고리즘 (3)
      • 정보처리기사 (10)
      • Git∕GitHub (7)
      • 기타 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    SAP HANA Studio
    정처기 수제비
    프로그래머스 카카오
    정처기 수제비 데일리 문제
    파이썬 포맷팅
    treemap
    인텔리제이
    IntelliJ
    정처기 수제비 실기문제
    HashMap
    정처기 실기
    treeset
    Sort a HashMap in Java
    MySQL
    배열 정렬하기
    코딩테스트
    leetcode
    Guava library
    hashmap sort
    정처기 실기 예상문제
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
heestory217
[LeetCode] Binary Tree Inorder Traversal
상단으로

티스토리툴바