day11.14

下午看比赛了,又搞得好困=  =

晚上写了6,7道题。

今天的题才发现自己写的好多方法都好麻烦啊,别人简单的递归就出来了,还是得加强啊。

这几道题包括之前的

Lowest Common Ancestor of a Binary Tree感觉都挺经典。要好好理解思路。
说下最后写的那个Flatten。 
用栈来递归很不错
    stack<TreeNode*> s;
    void flatten(TreeNode* root) {
        if(!root) return;
        if(root->right)
            s.push(root->right);
        root->right=root->left;
        root->left=NULL;
        flatten(root->right);
        while(!s.empty()){
            root->right=s.top();
            s.pop();
            flatten(root->right);
        }
从root开始让root->right都入栈保存起来,然后root->right=root->left;root->left=NULL;之后在递归调用flatten对root->right。这样结束之后根和左子树中的所有结点的左子树就已经都在root
的右子树中并且现在暂时成型的树全部是所有左子树结点按序连接好的。所有根的左子树中的所有结点的右子树以及根的右子树都在栈中了。而且最后被压入栈的是下一个要被处理的结点。
所以就进入while循环有root->right=s.top();出栈,然后递归处理刚连上的这个结点。

明天实验报告写了然后继续刷题,编译原理最好能看看吧,睡觉睡觉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值