题目描述
给定一个二叉树,原地将它展开为一个单链表。
例如,给定二叉树
1
/ \
2 5
/ \ \
3 4 6
将其展开为:
1
\
2
\
3
\
4
\
5
\
6
解题思路
使用前序遍历的方式,将root的right指针指向遍历的下一个节点。设定一个空的头节点,每次从栈中pop一个元素时,right指针指向该节点,同时将pop元素的左右指针加入到栈中。
void flatten(TreeNode* root) {
if(root==nullptr)
return;
TreeNode* hair = new TreeNode();
stack<TreeNode*> sta;
sta.push(root);
while(!sta.empty()){
TreeNode* cur = sta.top();
sta.pop();
hair->right = cur;
hair = hair->right;
if(cur->right){
sta.push(cur->right);
cur->right = nullptr;
}
if(cur->left){
sta.push(cur->left);
cur->left = nullptr;
}
}
}
网友评论