题目链接:
https://leetcode.com/problems/flatten-binary-tree-to-linked-list/
题目描述:
把一个二叉树变成单链表的形式,即退化为单枝树。
把
1
/ \
2 5
/ \ \
3 4 6
变为
1
\
2
\
3
\
4
\
5
\
6
题目分析:
递归先序遍历的变形吧,可以观察到变为单枝树时,是按原二叉树先序遍历的序列链接的。所以在先序遍历的递归返回时,做一些处理,把二叉树的节点重新链一下。大概思路是让当前根节点的左孩子为空,右孩子指向原来的左孩子,原来的左孩子的最后一个右孩子(即为空指针域)指向根节点的原右孩子。
代码:
class Solution {
public:
TreeNode* preOrderTraverse(TreeNode* root){
if (root != NULL){
TreeNode* lChild=preOrderTraverse(root->left);
TreeNode* rChild = preOrderTraverse(root->right);
if (lChild == NULL){
root->right = rChild;
root->left = NULL;
return root;
}
else{
root->right = lChild;
root->left = NULL;
while (lChild->right != NULL){
lChild = lChild->right;
}
lChild->right = rChild;
return root;
}
}
else{
return NULL;
}
}
void flatten(TreeNode* root) {
root=preOrderTraverse(root);
}
};