day11.14

来源:互联网 发布:淘宝小号无忧 编辑:程序博客网 时间:2024/05/16 15:25

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

晚上写了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();出栈,然后递归处理刚连上的这个结点。

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

Lowest Common Ancestor of a Binary Tree
0 0
原创粉丝点击