小言_互联网的博客

【每日刷题】二叉树展开为链表

311人阅读  评论(0)

题目地址

https://leetcode-cn.com/problems/path-sum-ii/

题目描述:路径总和II

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

示例:

给定二叉树

   1
  / \
 2   5
/ \   \
3   4   6

将其展开为:

1
\
 2
  \
   3
    \
     4
      \
       5
        \
         6

解答

很简单的一道题,跟着代码走一遍,自然就理解了。

代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    void flatten(TreeNode* root) {
        if( !root)  return ;    //终止条件
        TreeNode* temp = root->right;   //暂存右孩子
        root->right = root->left, root->left = NULL;    //将左孩子搬到右孩子处,且随后将左孩子置空
        flatten(temp), flatten(root->right);    //递归处理 暂存的右孩子 和 当前右孩子
        //以下过程为 链接右孩子
        TreeNode* now = root;
        while( now->right)
            now = now->right;
        now->right = temp;
    }
};

当然,递归并不是严格意义上的原地算法。可以使用迭代在严格意义上实现该要求。

迭代:若左侧不为空,则每次将当前结点的右孩子接到当前孩子的左孩子的最右侧。


转载:https://blog.csdn.net/sd4567855/article/details/102060260
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场