[검지 Offer] 8.두 갈래 나무의 다음 결점
제목 설명
두 갈래 나무와 그 중의 한 결점을 정하십시오. 순서를 반복하는 다음 결점을 찾아 돌아오십시오.나무의 결점은 좌우 자결점뿐만 아니라 부모 결점을 가리키는 바늘도 포함하고 있음을 주의하십시오.
public class TreeLinkNode {
int val;
TreeLinkNode left = null;
TreeLinkNode right = null;
TreeLinkNode next = null;
TreeLinkNode(int val) {
this.val = val;
}
}
문제 풀이 사고방식
오른쪽 노드가 비어 있는지 판단하기
① 만약에 한 노드의 오른쪽 나무가 비어 있지 않으면 이 노드의 다음 노드는 오른쪽 나무의 가장 왼쪽 노드이다.② 그렇지 않으면 첫 번째 왼쪽 링크가 가리키는 트리에 해당 노드의 조상 노드가 포함되어 있습니다.
/*
public class TreeLinkNode {
int val;
TreeLinkNode left = null;
TreeLinkNode right = null;
TreeLinkNode next = null;
TreeLinkNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public TreeLinkNode GetNext(TreeLinkNode pNode) {
if(pNode.right != null) {
TreeLinkNode node = pNode.right;
while(node.left != null)
node = node.left;
return node;
}else {
while(pNode.next != null) {
TreeLinkNode parens = pNode.next;
if(parens.left == pNode)
return parens;
pNode = pNode.next;
}
}
return null;
}
}
목록 반복
static ArrayList<TreeLinkNode> a=new ArrayList<>();
public static void InOrder(TreeLinkNode pRoot){
if (pRoot != null) {
InOrder(pRoot.left);
a.add(pRoot);
InOrder(pRoot.right);
}
}
public TreeLinkNode GetNext(TreeLinkNode pNode)
{
TreeLinkNode p=pNode;
int i;
while (pNode.next!=null)
{
pNode=pNode.next;
}
InOrder(pNode);
for( i=0;i<a.size();i++)
{
if(p==a.get(i))
{
return i == a.size()-1?null:a.get(i+1);
}
}
return null;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Rails Turbolinks를 페이지 단위로 비활성화하는 방법원래 Turobolinks란? Turbolinks는 링크를 생성하는 요소인 a 요소의 클릭을 후크로 하고, 이동한 페이지를 Ajax에서 가져옵니다. 그 후, 취득 페이지의 데이터가 천이 전의 페이지와 동일한 것이 있...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.