algorithm/problem solving

Leetcode Binary tree

qkqhxla1 2019. 4. 20. 17:09

https://leetcode.com/explore/learn/card/data-structure-tree/


에서 푼 내용을 정리했습니다. 물론 go to dicuss가면 사람들이 솔루션을 다 써놨는데 몇몇 개념이나 방법론 등을 까먹지 않으려고 이 페이지에 정리해두려고 합니다.


preorder, inorder, postorder

일반적으로 전,중,후위순회를 구현할때 재귀 형식으로 쉽게 했는데 재귀 말고 dfs의 개념으로 기억해도 좋은것같다.(이게 더 활용도 잘되는것같다.) 다만 중위순회는 좀 짜야되고.. 전위순회는 스택 사용해서 오른쪽 자식부터 넣고 왼쪽 자식을 넣는다. 그럼 왼쪽 자식부터 순회할테니 이런식으로 짜면 되고, 후위순회는 전위순회와 반대로 왼쪽 자식부터 넣으면서 루트->오른쪽자식-> 왼쪽자식 순으로 순회한다음 이걸 거꾸로 한게 후위순회이므로 거꾸로 돌려준다.


level order

자식들을 다 돌고나서 그 아래자식들로 내려간다. BFS이므로 큐를 이용해서 짠다.

maximum depth of tree

dfs던 bfs던 순회하면서 현재 깊이 정보를 저장해놓는다. 현재 깊이가 max 깊이보다 더 깊으면 교체해준다.

symmetric tree(거울인지 판별.)

bfs로 돌면서 트리를 그려준다. 그리고 한 단씩 보면서 좌우 대칭이 되는지 확인한다.

path sum(자식으로 가는 길의 합)

dfs로 돌면서 자식의 합을 따로 옆에 저장해둔다. leaf일때 질문에서 원하는 답과 같은지 확인한다.

.. 계속