原题网址:https://www.lintcode.com/problem/flatten-binary-tree-to-linked-list/description
描述
将一棵二叉树按照前序遍历拆解成为一个假链表
。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。
不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。
您在真实的面试中是否遇到过这个题? 是
样例
1
1 2
/ \ 2 5 => 3
/ \ \ 3 4 6 4
5
6
挑战
不使用额外的空间耗费。
标签
二叉树
Depth-first Search(DFS)
非挑战思路:
1.前序遍历,将节点地址保存在数组中。
2.创建链表:下标从1开始遍历数组,将当前节点的right赋值为当前数组元素,同时当前节点left赋值NULL,再用right值更新当前节点。
AC代码:
/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right = NULL; * } * } */ class Solution { public: /** * @param root: a TreeNode, the root of the binary tree * @return: nothing */ void flatten(TreeNode * root) { // write your code here if (root==NULL) { return ; } vector<TreeNode*> tmp; pretrav(tmp,root); for (int i=1;i<(int)tmp.size();i++) { root->right=tmp[i]; root->left=NULL; root=root->right; } } void pretrav(vector<TreeNode*> &tmp,TreeNode * root) { if (root==NULL) { return ; } tmp.push_back(root); pretrav(tmp,root->left); pretrav(tmp,root->right); } };
原文地址:https://www.cnblogs.com/Tang-tangt/p/9251592.html
时间: 2024-10-08 12:03:37