二叉树经典题之线索二叉树(中序)
生活随笔
收集整理的這篇文章主要介紹了
二叉树经典题之线索二叉树(中序)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
前言:
二叉樹刷題是有固定思維的,請移步
README】二叉樹刷題框架
線索二叉樹
題目
點(diǎn)擊跳轉(zhuǎn):???/p>
思路
此題本質(zhì)就是二叉樹的線索化,所謂二叉樹的線索化就是不借用棧通過指針的指向來完成二叉樹的非遞歸遍歷
所以此題中要求的雙向鏈表本質(zhì)就是指針的鏈接,而且它要求的是排好序的雙向鏈表,而我們知道二叉搜索樹的中序遍歷就是順序的,所以可以進(jìn)行中序線索化
過程也非常簡單,只需要創(chuàng)建一個前驅(qū)指針prev,再每次進(jìn)行遞歸之前,把當(dāng)前結(jié)點(diǎn)root的left指向prev,同時把prev(不空)的right指向root。
/* struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {} };*/ class Solution { public:void Link(TreeNode* root,TreeNode*& prev){if(root==NULL)return;Link(root->left,prev);root->left=prev;if(prev)prev->right=root;prev=root;Link(root->right,prev);}TreeNode* Convert(TreeNode* pRootOfTree) {if(pRootOfTree==NULL)return NULL;TreeNode* prev=NULL;Link(pRootOfTree,prev);TreeNode* head=pRootOfTree;while(head->left)head=head->left;return head;} };總結(jié)
以上是生活随笔為你收集整理的二叉树经典题之线索二叉树(中序)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Centos6.5环境中安装vsftp服
- 下一篇: 第一章第一节:C++简介与学习方法