[C++ STL] rbtree_iterator

오젼·2022년 9월 22일
0

[C++ STL]

목록 보기
7/11

increment

  • https://stackoverflow.com/questions/20990808/bst-finding-next-highest-node
  • operator++을 위한 알고리즘
  • Case 1: right child가 있으면 right child의 leftmost 노드 리턴(내 right subtree가 존재한다면 right subtreeleftmost 노드가 나보다 큰 값 중 가장 작은 값)
  • Case 2: right child가 없는 경우, 내가 left child였을 때까지 위로 올라가서 내 부모 노드 리턴(내가 left sub tree였을 동안 위로 올라가서 그 부모를 리턴해야 나보다 큰 값 중 가장 작았던 값을 리턴할 수 있다.)
  • Case 3: 위에서 리턴 안 됐음 TNULL노드(leaf node) 리턴.

decrement

  • operator--를 위한 알고리즘 (operator++ 와 반대라고 생각하면 됨)
  • Case 1: left child가 있으면 left child의 rightmost 노드 리턴(내 left subtree가 존재한다면 left subtreerightmost 노드가 나보다 작은 값 중 가장 큰 값)
  • Case 2: left child가 없는 경우, 내가 right child였을 때까지 위로 올라가서 내 부모 노드 리턴(내가 right sub tree였을 동안 위로 올라가서 그 부모를 리턴해야 나보다 작은 값 중 가장 컸던 값을 리턴할 수 있다.)
  • Case 3: 위에서 리턴 안 됐음 TNULL노드(leaf node) 리턴.

end(== leaf node == _TNULL)의 --를 위해 필요한 추가 작업

  • 이론상 leaf node는 parent를 가리킬 필요가 없음.
  • 하지만 end에서 --를 하면 tree의 rightmost 노드를 가리킬 수 있어야 함.
  • 이를 위해 end의 parent를 root를 가리키게 해줘서
  • end에서 --를 하려고 할 땐 end->parent(== root)의 maximum 노드를 가리키도록 해줬음.

0개의 댓글