| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1716 人关注过本帖
标题:leetcode114
只看楼主 加入收藏
归鸿唱晚
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-12-4
收藏
 问题点数:0 回复次数:5 
leetcode114
程序代码:
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==NULL)return;  
       flatten(root->left);     
       flatten(root->right);   
       TreeNode *temp=root->right;     
       root->right=root->left;       
       root->left=NULL;     
       while(root->right)root=root->right;    
       root->right=temp;
    }
};
图片附件: 游客没有浏览图片的权限,请 登录注册

while那行改变了root,root不就不是头结点了吗,这么做为什么没有问题?
搜索更多相关主题的帖子: int left NULL temp while 
2018-12-04 20:26
归鸿唱晚
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-12-4
收藏
得分:0 
回复 楼主 归鸿唱晚
图片附件: 游客没有浏览图片的权限,请 登录注册
2018-12-04 20:27
归鸿唱晚
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-12-4
收藏
得分:0 
回复 楼主 归鸿唱晚
图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2018-12-4 20:31编辑过]



未命名图片.png (13.68 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
2018-12-04 20:27
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
收藏
得分:0 
其实就是不断通过递归将左枝转成右枝
这个明显是先序, 不是后序
改变 root 是因为不断让 root 寻找自己的右节点, 直到底部为止, 然后把 temp 挂上去
如果改成循环, 不用递归, 就要多一个 cursor, 而不是直接改 root, 此时 while 循环里面的 root 就会变成 cursor
这个就好理解多了
2018-12-04 22:54
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
void flatten(TreeNode* root)
root 是传值过来的,在函数内部修改的也只是一个副本

BTW:直接贴原题链接,少贴图 https://
2018-12-05 09:18
归鸿唱晚
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-12-4
收藏
得分:0 
回复 3楼 归鸿唱晚
懂了,谢谢了各位!
2018-12-05 19:16
快速回复:leetcode114
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023834 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved