【LeetCode笔记】114.Flatten Binary Tree to Linked List(有疑惑)
来源:互联网 发布:淘宝全网举报中心网址 编辑:程序博客网 时间:2024/05/22 07:56
题目:
- Total Accepted: 119447
- Total Submissions: 348844
- Difficulty: Medium
- Contributor: LeetCode
Given a binary tree, flatten it to a linked list in-place.
For example,
Given
1 / \ 2 5 / \ \ 3 4 6The flattened tree should look like:
1 \ 2 \ 3 \ 4 \ 5 \ 6
click to show hints.
Hints:
If you notice carefully in the flattened tree, each node's right child points to the next node of a pre-order traversal.
原始的树前序遍历,存入队列,然后顺序读出,一直往树的右子树放置。这样的思路我把答案输出了,我觉得是对的呀,不知道为啥leetcode一直判断我是错的,如果有大神能来指正,真心感谢!
代码如下:
/** * 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 p(TreeNode* root,queue<int> &v){ if (root ==NULL) return; else{ v.push(root->val); if(root->left!=NULL) p(root->left,v); if(root->right!=NULL) p(root->right,v); } } void flatten(TreeNode* root) { if(root==NULL) return; else{ queue<int> v; p(root,v); TreeNode* t = new TreeNode(v.front()); TreeNode* temp = t; v.pop(); while(!v.empty()){ TreeNode* l = new TreeNode(v.front()); t->right = l; t = t->right; v.pop(); } root = temp;
//这一段printf是为了验证我的答案到底都不对才写的,就是把root节点打印出来看看到底是什么,结果显示是对的呀。。。 if(root!=NULL) printf("root = %d\n",root->val); else printf("root null!\n"); if(root->left!=NULL) printf("ok2 %d\n",root->left->val); else printf("root->left null\n"); if(root->right!=NULL) printf("root->right = %d\n",root->right->val); else printf("root->right null\n"); } }};结果:
Submission Result: Wrong Answer More Details
小白不明白的是,为啥我输出的答案和标准答案是一样的,但是系统判错?
更新思路:把左子树的所有节点按照存入右子树里,然后把原来右子树的节点存入左子树最右的节点中。递归撸平右子树。
/** * 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==NULL) return; if(root->left!=NULL){ TreeNode* temp = root->left; while(temp->right!=NULL) temp = temp->right; temp->right = root->right; root->right = root->left; root->left = NULL; } flatten(root->right); }};
0 0
- 【LeetCode笔记】114.Flatten Binary Tree to Linked List(有疑惑)
- LeetCode 114. Flatten Binary Tree to Linked List(Python)
- LeetCode: Flatten Binary Tree to Linked List
- LeetCode Flatten Binary Tree to Linked List
- LeetCode: Flatten Binary Tree to Linked List
- [Leetcode] Flatten Binary Tree to Linked List
- [LeetCode] Flatten Binary Tree to Linked List
- Leetcode: Flatten Binary Tree to Linked List
- leetcode Flatten Binary Tree to Linked List
- LeetCode Flatten Binary Tree to Linked List
- LeetCode - Flatten Binary Tree to Linked List
- 【leetcode】Flatten Binary Tree to Linked List
- [LeetCode]Flatten Binary Tree to Linked List
- [Leetcode]Flatten Binary Tree to Linked List
- [leetcode]Flatten Binary Tree to Linked List
- LeetCode-Flatten Binary Tree to Linked List
- [leetcode] Flatten Binary Tree to Linked List
- LeetCode - Flatten Binary Tree to Linked List
- Vim常用命令合集
- AngularJS 模块定义应用 angular.module
- 模拟洗牌、发牌
- linux 查看端口占用命令 亲测可用
- 正则表达式用法 python
- 【LeetCode笔记】114.Flatten Binary Tree to Linked List(有疑惑)
- 在 Word 中撰写并发布到博客的帮助
- windows ffmpeg mingw编译流程及vs中的使用方法(vs2005及其以上可用)
- 克隆二叉树
- 这个博客就不更新了 本人做了个社区欢迎大家过来捧场
- 4817: [Sdoi2017]树点涂色
- LeetCode-M-Remove Duplicates from Sorted List II
- Statement.execute() 返回值
- 启动3个线程,线程1打印1到5,线程2打印5到10,线程3打印11到15,然后线程1打印16到20,以此类推。。。打印到30为止