LeetCode(Oct28'12):Populating Next Right Pointers in Each Node
제목은 다음과 같습니다.
Given a binary tree
struct TreeLinkNode {
TreeLinkNode *left;
TreeLinkNode *right;
TreeLinkNode *next;
}
Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to
NULL
. Initially, all next pointers are set to
NULL
. Note:
You may only use constant extra space.
You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent has two children).
For example, Given the following perfect binary tree,
1
/ \
2 3
/ \ / \
4 5 6 7
After calling your function, the tree should look like:
1 -> NULL
/ \
2 -> 3 -> NULL
/ \ / \
4->5->6->7 -> NULL
사실은 완전한 두 갈래 나무에 같은 층의 노드를 체인 시계로 꿰매는 것이다. 체인 시계의 구조는 나무 노드에서도 이미 제시되었다.다음은 다음과 같습니다.
class Solution {
public:
void connect(TreeLinkNode *root) {
for(;root!=NULL;root=root->left)
{
createConnect(root->left,root);
}
}
void createConnect(TreeLinkNode *dest,TreeLinkNode *parent)
{
if(dest==NULL) return;
TreeLinkNode *tmpP,*tmpD;
dest->next=parent->right;
for(tmpP=parent->next,tmpD=dest->next;tmpP!=NULL;tmpP=tmpP->next,tmpD=tmpD->next->next)
{
tmpD->next=tmpP->left;
tmpD->next->next=tmpP->right;
}
}
};
프로그램은 매우 간단해서 말할 만한 알고리즘이 없다.위에서 아래로 각 층을 순환하고 반복할 때 아버지의 노드를 가지고 있다. 아버지의 노드는 이미 체인식 구조를 형성했기 때문에 이 층 노드의next에 하나씩 값을 부여하면 된다.질문: 1. NULL 노드를 입력하고 고려하지 않으면 Runtime Error를 보고합니다.2. 하나의 노드만 있고 노드의 각 포인터의 NULL 상황을 고려한다.3. 첫 번째 부모 노드를 연결한 두 아이가 현재 처리된 노드를 뒤로 옮기지 않아 층수 >=4의 경우 중간 노드는 내부만 연결되고 전체 체인에 연결되지 않는다(건너뛰었기 때문이다).마지막으로 부모 노드만 윗층의 첫 번째와 마지막 아이의 노드로 연결된다.PS. csdn의 편집기도 너무 어렵죠...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.