leetcode之 二叉树展开为链表

题目描述

给定一个二叉树,原地将它展开为一个单链表。

例如,给定二叉树
leetcode之 二叉树展开为链表_第1张图片

题目分析

其实是分为三步:

首先将根节点的左子树变成链表
其次将根节点的右子树变成链表
最后将变成链表的右子树放在变成链表的左子树的最右边
leetcode之 二叉树展开为链表_第2张图片

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    void flatten(TreeNode* root) {
        if(root==NULL)return;
        //把树的左子树变为链表
        flatten(root->left);
        //把树的右子树变为链表
        flatten(root->right);
        TreeNode* tmp=root->right;
        //把树的右子树等于左子树
        root->right=root->left;
        //左子树清空
        root->left=NULL;
        //找到右子树最后一个结点
        while(root->right)root=root->right;
        root->right=tmp;

    }
};

你可能感兴趣的:(leetcode)