leetcode || 114、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
click to show hints.
Hide Tags
Tree Depth-first Search
제목: 두 갈래 나무를 평평하게 하여 왼쪽 나무를 비우다
thinking:
(1) 이 문제는 비교적 재미있다. 제목은linkedlist를 언급했는데 정말list로 전환하는 것이 아니라 두 갈래 나무의 왼쪽 나무를 공중에 띄우고 모두 오른쪽 나무에 걸었다.
(2) 나의 해법: 관찰을 통해 알 수 있듯이 노드 노드의 왼쪽 아이가 비어 있지 않으면 오른쪽으로 옮겨야 하고 왼쪽 아이는 비어야 하며 오른쪽 아이는 왼쪽 아이가 바뀌어야 한다.
Stack
(3) 창고의 역할은 아이가 접속하는 순서와 시기를 제어하는 것이다.이곳은 더욱 간소화할 수 있다.
code:
Stack법의 적용:
class Solution {
private:
stack<TreeNode *> _stack;
public:
void flatten(TreeNode *root) {
if(root==NULL)
return;
TreeNode *node=root;
while(node->left!=NULL) // , ,
{
if(node->right!=NULL)
_stack.push(node->right);
node->right=node->left;
node->left=NULL;
node=node->right;
}
while(node->left==NULL && node->right!=NULL)// , ,
{
node=node->right;
}
if(node->left!=NULL) // , , ,
flatten(node);
if(!_stack.empty()) // ,
{
TreeNode *tmp=_stack.top();
_stack.pop();
node->right=tmp;
flatten(tmp);
}
}
};
단순화:
class Solution {
public:
TreeNode *pre=NULL;
void flatten(TreeNode *root) {
if(root==NULL)
return;
TreeNode *lastright=root->right;//
if(pre)
{
pre->left=NULL;
pre->right=root;
}
pre=root;
flatten(root->left);
flatten(lastright);
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java 백엔드에서 데이터를 트리로 변환하고 맵은 json 트리를 생성하여 백엔드로 되돌려줍니다. (백엔드 변환)java 백엔드, 데이터를 트리로 변환하고,map는 json 트리를 생성하여 전방으로 되돌려줍니다(백엔드 변환) 1. 왜 이런 블로그를 쓰나요? 2.java 백엔드 코드 3. 전환된 데이터는 다음과 유사한 형식으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.