Ii에 문제가 있습니다. 바이너리 트리를 지그재그 형식으로 이중 연결 목록으로 변환해야합니다.바이너리 트리를 지그재그 명령으로 변환하여 이중 연결 목록
DLLNode* ConvertBTToZigZgDLL(Node* root)
{
DLLNode* start=createDLLNode(root->data);
DLLNode* tail=start;
Stack<Node> stack1, stack2;
stack1.push(root->left);
stack1.push(root->right);
while(!stack1.Empty() || !stack2.Empty())
{
while(stack1.HasElement())
{
Node* temp=stack1.Pop();
stack2.push(temp->right);
stack2.push(temp->left);
tail=Attach(tail,createDLLNode(temp->data));
tail=tail->next;
}
while(stack2.HasElement())
{
Node* temp=stack2.Pop();
stack1.push(temp->left);
stack1.push(temp->right);
tail=Attach(tail,createDLLNode(temp->data));
tail=tail->next;
}
}
return start;
} 여기 TimeComplexity O (N), N은 주어진 이진 트리의 노드에는이다 :
Given BT: [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15]ZigZag order of BT in DLL: [1] [3] [2] [4] [5] [6] [7] [15] [14] [13] [12] [11] [10] [9] [8]
여기 내 의사입니다.
DLLNode* Attach(DLLNode* source, DLLNode* dest)
{
source.Next=dest;
dest.prev=source;
return source;
}
DLLNode* CreateDLLNode(int data)
{
DLLNode* res=malloc(sizeof(struct DLLNode));
res->data=data;
res->prev=NULL;
res->next=NULL;
return res;
}
난 내 코드의 논리에서 무엇이 잘못되었는지 을 알고 싶은 모든.
친구 중 한 명은 위의 코드가 작동하지 않으며 잘못되었다고 말하고 있습니다. 내 논리가 실패 할 어떤 유스 케이스도 찾을 수 없었다. (널 체크/널/빈 노드 제외)
그냥 내 코드의 논리를 확인하고 알려줘.
내 논리는 간단합니다 : 2 스택을 사용하십시오. stack1에서는 항상 왼쪽 자식을 먼저 누른 다음 오른쪽 자식을 밀어 넣고 stack2에서 항상 오른쪽 자식을 먼저 푸시하고 자식을 두 번째 왼쪽으로 푸시합니다. 처음에 stack1을로드하고 stack1은 비어 있지 않은 pop이고 stack2에서 해당 오른쪽/왼쪽 자식 노드를 푸시합니다. 위의 예제에서 스택 상태는 s1-B [2,3] T s2-B [7,6,5,4] T s1-B [8,9,10,11,12,13,14, 15] T B- 스택 하단 T- 스택 상단. Pls 다시 확인하십시오. 감사.
내 코드가 다른 게시물에서 주어진 노드의 레벨을 확인하지 않습니다. 그리고 내 관심사는 위의 코드가 맞는지 아닌지입니다.이 코드는 아무데도 없습니다 .. Pls가 이해하고 도와 줘서 고마워 .. – javasoul
알고리즘에 대해 물어볼 때 다른 사람들이 (특정 구현과 비교하여) 당신이하려고하는 것을 평범한 단어로 표현한다면 비판하십시오. –