博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
按层空间复杂度Populating Next Right Pointers in Each Node II
阅读量:5037 次
发布时间:2019-06-12

本文共 2847 字,大约阅读时间需要 9 分钟。

题记:写这篇博客要主是加深自己对按层空间复杂度的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢。

    

Follow up for problem "Populating Next Right Pointers in Each Node".

    

What if the given tree could be any binary tree? Would your previous solution still work?

    

Note: You may only use constant extra space.

    

 

    

For example,

Given the following binary tree,

1       /  \      2    3     / \    \    4   5    7

    

 

    每日一道理
生命,是一场漫长的棋局。这盘棋没有猎猎西风,没有四起狼烟,只有在取舍和进退中抉择。只有像棋中的小卒那样,勇往直前,毫不退缩沿着沟沟坎坎的人生之路,艰难而执着的求索,前进,才会谱写人生最壮丽的强者之歌。

    

After calling your function, the tree should look like:

1 -> NULL       /  \      2 -> 3 -> NULL     / \    \    4-> 5 -> 7 -> NULL

    码好一次性通过~~ yeah~

    路思是很明显的,一层一层的找,利用前当层的next来figure out下一层的next

    第一次做的时候用了queue来实现的按层遍历,此次才看到了 O(1)的空间复杂度。

    从新写了一下,为了看起来路思清楚点,码代写的略长。

/** * Definition for binary tree with next pointer. * struct TreeLinkNode { *  int val; *  TreeLinkNode *left, *right, *next; *  TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {} * }; */class Solution {public:    TreeLinkNode* myNextLine(TreeLinkNode *cur){        if(cur -> left) return cur -> left;        if(cur -> right) return cur -> right;                while(cur -> next){            cur = cur -> next;            if(cur -> left) return cur -> left;            if(cur -> right) return cur -> right;        }                return NULL;    }    TreeLinkNode* myleftnext(TreeLinkNode *cur){        if(cur -> right) return cur -> right;                while(cur -> next){            cur = cur -> next;            if(cur -> left) return cur -> left;            if(cur -> right) return cur -> right;        }                return NULL;    }        TreeLinkNode* myrightnext(TreeLinkNode *cur){        while(cur -> next){            cur = cur -> next;            if(cur -> left) return cur -> left;            if(cur -> right) return cur -> right;        }                return NULL;    }        void connect(TreeLinkNode *root) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        if(!root) return;                TreeLinkNode *cur = root;        TreeLinkNode *nextLine = myNextLine(cur);                while(nextLine){            while(cur){                if(cur -> left){                    cur -> left -> next = myleftnext(cur);                }                if(cur -> right){                    cur -> right -> next = myrightnext(cur);                }                                                cur = cur -> next;            }            cur = nextLine;            nextLine = myNextLine(cur);        }            }};

    

文章结束给大家分享下程序员的一些笑话语录: 小沈阳版程序员~~~ \n程序员其实可痛苦的了......需求一做一改,一个月就过去了;嚎~ \n需求再一改一调,一季度就过去了;嚎~ \n程序员最痛苦的事儿是啥,知道不?就是,程序没做完,需求又改了; \n程序员最最痛苦的事儿是啥,知道不? 就是,系统好不容易做完了,方案全改了; \n程序员最最最痛苦的事儿是啥,知道不? 就是,系统做完了,狗日的客户跑了; \n程序员最最最最最痛苦的事儿是啥,知道不? 就是,狗日的客户又回来了,程序给删没了!

转载于:https://www.cnblogs.com/xinyuyuanm/archive/2013/05/05/3061645.html

你可能感兴趣的文章
solr添加IK分词和自己定义词库
查看>>
mysql 日志
查看>>
在ASP.net中实现一个万能的“返回”按钮。
查看>>
HTML简介
查看>>
android可能遇到问题,以及找到的解决方法小总结!
查看>>
npm安装cnpm、vue、react
查看>>
通过adb命令打印log
查看>>
error rabbitMQ:Error: unable to perform an operation on node 'rabbit@xxxx'.
查看>>
js倒计时
查看>>
JSON数据检测是否正确
查看>>
hbase部署经验与坑总结
查看>>
腾讯QQ内测群新功能:QQ万人群即将袭来!
查看>>
iOS 事件处理机制与图像渲染过程
查看>>
数字是否可以被3和5同时整除,use if and % (21.9.2017)
查看>>
Warsaw University Contest Petrozavodsk, Thursday, January 31, 2008 F题,Gym100096F
查看>>
lcx端口转发 linux版
查看>>
arcgis server 10.1 发布动态图层展示海量及频繁更新的数据步骤
查看>>
strncat_s
查看>>
避免复制引用程序集的XML文件
查看>>
C IO(一般性)
查看>>