leetcode의 Flatten Binary Tree to Linked List
Flatten Binary Tree to Linked List
Given a binary tree, flatten it to a linked list in-place.
For example, Given
1
/ \
2 5
/ \ \
3 4 6
The flattened tree should look like:
1
\
2
\
3
\
4
\
5
\
6
사고방식: 두 갈래 나무를 먼저 훑어보고 왼쪽 나무를 빈 노드로 하는 왼쪽 나무를 뒤에 있는 노드로 가리키고 모든 오른쪽 나무를 왼쪽 나무로 가리킨다
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void flatten(TreeNode *root)
{
if(!root || (!root->left && !root->right))return;
TreeNode* pre = NULL,*p = root;
stack<TreeNode*> stk;
while (p || !stk.empty())//
{
while (p)
{
stk.push(p);
p = p ->left;
}
p = stk.top();
stk.pop();
if(!p ->left)pre = p;
p = p->right;
if(p)pre->left = p;
}
p = root;
while (p)
{
p->right = p->left;
p->left = NULL;
p = p->right;
}
}
검지offer의 이원 찾기 트리를 정렬된 쌍방향 체인표로 바꾸는 것을 가리킨다
제목: 2원 찾기 트리를 입력하여 2원 찾기 트리를 정렬된 양방향 체인 테이블로 변환합니다.바늘의 방향만 조정하려면 새 결점을 만들 수 없습니다.
분석: 우리는 중간 순서로 나무 전체를 두루 돌아다닐 수 있다.이 방식에 따라 나무를 두루 돌아다니며 비교적 작은 결점을 먼저 방문한다.만약 우리가 매 결점을 방문할 때마다 이전에 방문한 결점이 정렬 양방향 체인 테이블로 조정되었다고 가정한다면, 우리는 현재 결점을 조정하는 바늘을 체인 테이블의 끝에 연결할 것이다.모든 결점을 방문한 후, 나무 전체가 정렬 양방향 체인 시계로 바뀌었다
TreeNode* convertTreeToDoubleList(TreeNode* root,TreeNode* &lastNode)
{
if(!root)return root;
TreeNode* curNode = root;
TreeNode* head = convertTreeToDoubleList(root->left,lastNode);// ,
curNode ->left = lastNode;//
if(lastNode)lastNode->right = curNode;//
lastNode = curNode;//
if(!head)head = curNode;
TreeNode* lHead = convertTreeToDoubleList(root->right,lastNode);// ,
curNode->right = lHead;
if(lHead)lHead->left = curNode;
return head;
}
TreeNode* convertTreeToDoubleList(TreeNode* root)
{
TreeNode* lastNode = NULL;
return convertTreeToDoubleList(root,lastNode);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python 체인 시계 조작 방법체인 미터 체인 테이블(linked list)은 결점이라고 불리는 데이터 요소로 구성된 데이터 구조로 각 결점은 결점 자체의 정보와 다음 결점을 가리키는 주소를 포함한다. 모든 결점은 연결할 수 있는 주소 정보를 포...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.