將二叉樹拆成鏈表 描述 筆記 數據 評測 將一棵二叉樹按照前序遍歷拆解成為一個假鏈表。所謂的假鏈表是說,用二叉樹的 right 指針,來表示鏈表中的 next 指針。 註意事項 不要忘記將左兒子標記為 null,否則你可能會得到空間溢出或是時間溢出。 您在真實的面試中是否遇到過這個題? Yes 哪家 ...
將一棵二叉樹按照前序遍歷拆解成為一個假鏈表
。所謂的假鏈表是說,用二叉樹的 right 指針,來表示鏈表中的 next 指針。
註意事項
不要忘記將左兒子標記為 null,否則你可能會得到空間溢出或是時間溢出。
您在真實的面試中是否遇到過這個題? Yes 哪家公司問你的這個題? Airbnb Amazon LinkedIn Cryptic Studios Dropbox Epic Systems TinyCo Hedvig Microsoft Yahoo Bloomberg Uber Snapchat Twitter Yelp Apple Google Facebook Zenefits 感謝您的反饋 樣例 1
\
1 2
/ \ \
2 5 => 3
/ \ \ \
3 4 6 4
\
5
\
6
挑戰
不使用額外的空間耗費。
這道題目很有趣的一點就是拆成右斜樹的假鏈表,並且這道題目是按照前序遍歷拆解,並不是按照數據大小拆解。
所以很容易的一個遞歸。
有兩點需要思考,從哪裡開始?(前序遍歷)怎麼拆?(保存左右兒子)
/** * 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: */ void flatten(TreeNode * root) { // write your code here if(root==NULL) return; TreeNode *l=root->left; TreeNode *r=root->right; flatten(root->left); flatten(root->right); if(root->left==NULL) return ; else { TreeNode *t=root->left; while(t->right) t=t->right; root->left=NULL; root->right=l; t->right=r; } return; } };