多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > leetcode筆記:Recover Binary Search Tree

leetcode筆記:Recover Binary Search Tree

來源:程序員人生   發布時間:2016-03-31 08:31:55 閱讀次數:2624次

1. 題目描寫

Two elements of a binary search tree (BST) are swapped by mistake.
Recover the tree without changing its structure.
Note:
A solution using O(n) space is pretty straight forward. Could you devise a constant space solution?

2. 題目分析

題目的大意是,在2叉排序樹中有兩個節點被交換了,要求把樹恢復成2叉排序樹。

1個最簡單的辦法是,中序遍歷2叉樹生成序列,然后對序列中排序毛病的進行調劑。最后再進行1次賦值操作。這類方法的空間復雜度為O(n)。

但是,題目中要求空間復雜度為常數,所以需要換1種方法。

遞歸中序遍歷2叉樹,設置1個prev指針,記錄當前節點中序遍用時的前節點,如果當前節點大于prev節點的值,說明需要調劑次序。

3. 示例代碼

/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode *p,*q; TreeNode *prev; void recoverTree(TreeNode *root) { p=q=prev=NULL; inorder(root); swap(p->val,q->val); } void inorder(TreeNode *root) { if(root->left)inorder(root->left); if(prev!=NULL&&(prev->val>root->val)) { if(p==NULL)p=prev; q=root; } prev=root; if(root->right)inorder(root->right); } };

4. 小結

有1個技能是,若遍歷全部序列進程中只出現了1次次序毛病,說明就是這兩個相鄰節點需要被交換。如果出現了兩次次序毛病,那就需要交換這兩個節點。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 目韩一区二区三区系列片丶 | 美女网站免费观看视频 | 亚洲视频免费在线看 | 性欧美videos高清精品 | 久久精品国产精品亚洲精品 | 欧美午夜小视频 | 精品一区二区三区自拍图片区 | h视频在线免费看 | 亚洲福利在线观看 | 插丝袜美女 | 亚洲妇人成熟性成熟网站 | 欧美日本一区二区三区道 | www淫| 亚洲综合春色另类久久 | 国产欧美日韩另类一区乌克兰 | 大学生毛片a左线播放 | www.中文字幕在线观看 | 日本专区 | 俺去俺来也www色官网免费的 | 久草在线香蕉 | 美女h在线观看 | 黄网址大全免费观看免费 | 国产成人a毛片在线 | 一本久久精品一区二区 | 五月花婷婷 | 2020国产成人免费视频 | 久久精品国产网红主播图片 | 直接在线观看的三级网址 | 亚洲欧美日韩综合一区久久 | 亚洲欧美成人综合 | 福利视频美女国产精品 | 91精品欧美一区二区综合在线 | 亚洲图片综合网 | 国产h视频在线观看网站免费 | 欧美特级午夜一区二区三区 | 欧美久久久久欧美一区 | 九九99久久精品影视 | 最近高清中文在线观看国语字幕7 | 亚洲成人在线免费视频 | 主播福利视频在线观看网址 | 亚洲一区二区三区欧美 |