分析题目要求,可知先序序遍历原二叉树,每次改变结点的右指针即可,需要注意的是,遍历过程中结点的左右指针会有改变,因此, 需要提前备份左右指针。
class Solution
{
public:
void flatten(TreeNode *root)
{
newHead = new TreeNode(0);
falttenHelper(root);
}
TreeNode *falttenHelper(TreeNode *root)
{
if(root==NULL)
return root;
//备份左右指针
TreeNode *left,*right;
left = root->left;
right = root->right;
root->left = NULL; //注意将左指针置为0
newHead->right = root;
newHead = root;
if(left)
falttenHelper(left);
if(right)
falttenHelper(right);
}
private:
TreeNode *newHead;
};
本文介绍了一种将二叉树扁平化的算法实现,通过先序遍历的方式,改变每个节点的右指针来完成整个二叉树的扁平化处理。此过程需要备份节点的左右子树指针,并调整左指针为空,最终实现二叉树到链表的转换。
844

被折叠的 条评论
为什么被折叠?



