위의 설명처럼 while loop 안에서 queue 에 입력된 node 들을 poll( )로 빼내어 그 자식들을 다시 offer( ) method로 입력해준다. Queue 안에 자식 node 들이 계속 입력되기 때문에 모든 트리 노드들을 탐색할 때까지 loop는 지속된다.
String 을 트리로 바꾸는 deserialize method
binary tree 이기 때문에 string의 index를 이용해 자식트리를 구분할 수 있다.
Note serialize method 에서 StringBuilder 대신 String을 사용하면 runtime 이 10배가 넘게 든다 이유는 String 과 StringBuilder/StringBuffer의 각각 immutable/mutable 특징을 갖는 저장방식이 다르기 떄문이다.
String은 기존의 값인 Hello 에서 HI를 더할 때 기존의 값을 수정하는 것이 아니라 HelloHi 라는 새로운 data를 만들고 기존의 Hello 값은 Garbage 가 된다. 이 점을 보완하기 위해 StringBuffer 와 StringBuilder 는 기존의 data인 Hello를 수정할 수 있게 만들어졌다.
StringBuffer와 StringBuilder의 차이점은 StringBuffer는 멀티쓰레드에서 동기화를 지원하고 StringBuilder는 지원하지않는다. 단일 Thread 에서는 StringBuilder 가 제일 빠르다.