欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

二叉樹的經(jīng)典面試題分析(三十七)-創(chuàng)新互聯(lián)

我們之前學(xué)習(xí)了二叉樹相關(guān)的概念,那么我們今天來分析下二叉樹中的一些經(jīng)典面試題。

成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供武安網(wǎng)站建設(shè)、武安做網(wǎng)站、武安網(wǎng)站設(shè)計、武安網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、武安企業(yè)網(wǎng)站模板建站服務(wù),十載武安做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

1、單度結(jié)點的刪除

-- 編寫一個函數(shù)用于刪除二叉樹中的所有單度結(jié)點;

?-- 要求:結(jié)點刪除后,其唯一的子結(jié)點替代它的位置。

示例如下

二叉樹的經(jīng)典面試題分析(三十七)

a> 那么在我們的結(jié)點中包含指向父結(jié)點的指針。定義功能:delOld1(node),刪除 node 為根結(jié)點的二叉樹中的單度結(jié)點;

實現(xiàn)思路如下

二叉樹的經(jīng)典面試題分析(三十七)

我們來看看具體代碼怎么寫

#include?<iostream>
#include?"BTree.h"

using?namespace?std;
using?namespace?DTLib;

template?<?typename?T?>
BTreeNode<T>*?createTree()
{
????static?BTreeNode<int>?ns[9];

????for(int?i=0;?i<9;?i++)
????{
????????ns[i].value?=?i;
????????ns[i].parent?=?NULL;
????????ns[i].left?=?NULL;
????????ns[i].right?=?NULL;
????}

????ns[0].left?=?&ns[1];
????ns[0].right?=?&ns[2];
????ns[1].parent?=?&ns[0];
????ns[2].parent?=?&ns[0];

????ns[1].left?=?&ns[3];
????ns[1].right?=?NULL;
????ns[3].parent?=?&ns[1];

????ns[2].left?=?&ns[4];
????ns[2].right?=?&ns[5];
????ns[4].parent?=?&ns[2];
????ns[5].parent?=?&ns[2];

????ns[3].left?=?NULL;
????ns[3].right?=?&ns[6];
????ns[6].parent?=?&ns[3];

????ns[4].left?=?&ns[7];
????ns[4].right?=?NULL;
????ns[7].parent?=?&ns[4];

????ns[5].left?=?&ns[8];
????ns[5].right?=?NULL;
????ns[8].parent?=?&ns[5];

????return?ns;
}

template?<?typename?T?>
void?printInOrder(BTreeNode<T>*?node)
{
????if(?node?!=?NULL?)
????{
????????printInOrder(node->left);

????????cout?<<?node->value?<<?"?";

????????printInOrder(node->right);
????}
}

template?<?typename?T?>
void?printDualList(BTreeNode<T>*?node)
{
????BTreeNode<T>*?g?=?node;

????cout?<<?"head?->?tail:?"?<<?endl;

????while(?node?!=?NULL?)
????{
????????cout?<<?node->value?<<?"?";

????????g?=?node;

????????node?=?node->right;
????}

????cout?<<?endl;

????cout?<<?"tail?->?head:?"?<<?endl;

????while(?g?!=?NULL?)
????{
????????cout?<<?g->value?<<?"?";

????????g?=?g->left;
????}

????cout?<<?endl;
}

template<?typename?T?>
BTreeNode<T>*?delOld1(BTreeNode<T>*?node)
{
????BTreeNode<T>*?ret?=?NULL;

????if(?node?!=?NULL?)
????{
????????if(?((node->left?!=?NULL)?&&?(node->right?==?NULL))?||
????????????((node->left?==?NULL)?&&?(node->right?!=?NULL))?)
????????{
????????????BTreeNode<T>*?parent?=?dynamic_cast<BTreeNode<T>*>(node->parent);
????????????BTreeNode<T>*?node_child?=?(node->left?!=?NULL)???node->left?:?node->right;

????????????if(?parent?!=?NULL?)
????????????{
????????????????BTreeNode<T>*&?parent_child?=?(parent->left?==?node)???parent->left?:?parent->right;

????????????????parent_child?=?node_child;
????????????????node_child->parent?=?parent;
????????????}
????????????else
????????????{
????????????????node_child->parent?=?NULL;
????????????}

????????????if(?node->flag()?)
????????????{
????????????????delete?node;
????????????}

????????????ret?=?delOld1(node_child);
????????}
????????else
????????{
????????????delOld1(node->left);
????????????delOld1(node->right);

????????????ret?=?node;
????????}
????}

????return?ret;
}

int?main()
{
????BTreeNode<int>*?ns?=?createTree<int>();

????printInOrder(ns);

????cout?<<?endl;

????ns?=?delOld1(ns);

????printInOrder(ns);

????cout?<<?endl;

????int?a[]?=?{6,?7,?8};

????for(int?i=0;?i<3;?i++)
????{
????????TreeNode<int>*?n?=?ns?+?a[i];

????????while(?n?!=?NULL?)
????????{
????????????cout?<<?n->value?<<?"?";

????????????n?=?n->parent;
????????}

????????cout?<<?endl;
????}

????return?0;
}

我們在其中構(gòu)建的是上圖中的二叉樹,來運行看看結(jié)果

二叉樹的經(jīng)典面試題分析(三十七)

我們看到運行的結(jié)果和我們想象的是一致的,前序遍歷完后的結(jié)果為 6 0 7 2 8。

b> 結(jié)點中只包含左右孩子指針。定義功能:delOld2(node)? // node 為結(jié)點指針的引用;刪除 node 為根結(jié)點的二叉樹中的單度結(jié)點;

實現(xiàn)思路如下圖所示

二叉樹的經(jīng)典面試題分析(三十七)

我們來看看具體的源碼編寫

template<?typename?T?>
void?delOld2(BTreeNode<T>*&?node)
{
????if(?node?!=?NULL?)
????{
????????if(?((node->left?!=?NULL)?&&?(node->right?==?NULL))?||
????????????((node->left?==?NULL)?&&?(node->right?!=?NULL))?)
????????{
????????????BTreeNode<T>*?node_child?=?(node->left?!=?NULL)???node->left?:?node->right;

????????????if(?node->flag()?)
????????????{
????????????????delete?node;
????????????}

????????????node?=?node_child;

????????????delOld2(node);
????????}
????????else
????????{
????????????delOld2(node->left);
????????????delOld2(node->right);
????????}
????}
}

測試代碼如下

int?main()
{
????BTreeNode<int>*?ns?=?createTree<int>();

????printInOrder(ns);

????cout?<<?endl;

????delOld2(ns);

????printInOrder(ns);

????cout?<<?endl;

????return?0;
}

我們來看看運行結(jié)果

二叉樹的經(jīng)典面試題分析(三十七)

結(jié)果還是和之前的是一樣的,證明我們寫的是正確的。

2、中序線索化二叉樹

-- 編寫一個函數(shù)用于中序線索化二叉樹

?-- 要求:不允許使用其他數(shù)據(jù)結(jié)構(gòu)

示例如下

二叉樹的經(jīng)典面試題分析(三十七)

a> 在中序遍歷的同時進(jìn)行線索化

?思路:使用輔助指針,在中序遍歷時指向當(dāng)前結(jié)點的前驅(qū)結(jié)點;訪問當(dāng)前結(jié)點時,連接與前驅(qū)結(jié)點的先后次序;

示例如下

二叉樹的經(jīng)典面試題分析(三十七)

定義功能:inOrderThread(node, pre) ,node 為根結(jié)點,也是中序訪問的結(jié)點;pre 為中序遍歷時的前驅(qū)結(jié)點指針。

實現(xiàn)思路如下

二叉樹的經(jīng)典面試題分析(三十七)

我們來看看具體源碼是怎么寫的

template?<?typename?T?>
void?inOrderThread(BTreeNode<T>*?node,?BTreeNode<T>*&?pre)
{
????if(?node?!=?NULL?)
????{
????????inOrderThread(node->left,?pre);

????????node->left?=?pre;

????????if(?pre?!=?NULL?)
????????{
????????????pre->right?=?node;
????????}

????????pre?=?node;

????????inOrderThread(node->right,?pre);


????}
}

template?<?typename?T?>
BTreeNode<T>*?inOrderThread1(BTreeNode<T>*?node)
{
????BTreeNode<T>*?pre?=?NULL;

????inOrderThread(node,?pre);

????while(?(node?!=?NULL)?&&?(node->left?!=?NULL)?)
????{
????????node?=?node->left;
????}

????return?node;
}

測試代碼如下

int?main()
{
????BTreeNode<int>*?ns?=?createTree<int>();

????printInOrder(ns);

????cout?<<?endl;

????ns?=?inOrderThread1(ns);

????printDualList(ns);

????return?0;
}

運行結(jié)果如下

二叉樹的經(jīng)典面試題分析(三十七)

b> 中序遍歷的結(jié)案次序正好是結(jié)點的水平次序

思路:使用輔助指針,指向轉(zhuǎn)換后雙向鏈表的頭結(jié)點和尾結(jié)點;跟結(jié)點與左右子樹轉(zhuǎn)換的雙向鏈表連接,成為完整的雙向鏈表。

示例如下

二叉樹的經(jīng)典面試題分析(三十七)

定義功能:inOrderThread(node, head, tail); node 為根結(jié)點,也是中序訪問的結(jié)點;head 為轉(zhuǎn)換成功后指向雙向鏈表的首結(jié)點;tail 為轉(zhuǎn)換成功后指向雙向鏈表的尾結(jié)點。

實現(xiàn)思路如下

二叉樹的經(jīng)典面試題分析(三十七)

具體源碼實現(xiàn)

template?<?typename?T?>
void?inOrderThread(BTreeNode<T>*?node,?BTreeNode<T>*&?head,?BTreeNode<T>*&?tail)
{
????if(?node?!=?NULL?)
????{
????????BTreeNode<T>*?h?=?NULL;
????????BTreeNode<T>*?t?=?NULL;

????????inOrderThread(node->left,?h,?t);

????????node->left?=?t;

????????if(?t?!=?NULL?)
????????{
????????????t->right?=?node;
????????}

????????head?=?(h?!=?NULL)???h?:?node;

????????h?=?NULL;
????????t?=?NULL;

????????inOrderThread(node->right,?h,?t);

????????node->right?=?h;

????????if(?h?!=?NULL?)
????????{
????????????h->left?=?node;
????????}

????????tail?=?(t?!=?NULL)???t?:?node;
????}
}

template?<?typename?T?>
BTreeNode<T>*?inOrderThread2(BTreeNode<T>*?node)
{
????BTreeNode<T>*?head?=?NULL;
????BTreeNode<T>*?tail?=?NULL;

????inOrderThread(node,?head,?tail);

????return?head;
}

測試代碼

int?main()
{
????BTreeNode<int>*?ns?=?createTree<int>();

????printInOrder(ns);

????cout?<<?endl;

????ns?=?inOrderThread2(ns);

????printDualList(ns);

????return?0;
}

運行結(jié)果如下

二叉樹的經(jīng)典面試題分析(三十七)

我們看到兩中算法的遍歷結(jié)果是一樣的。關(guān)于二叉樹的面試題分析,我們就到這了,后面繼續(xù)學(xué)習(xí)相關(guān)的數(shù)據(jù)結(jié)構(gòu)。

分享題目:二叉樹的經(jīng)典面試題分析(三十七)-創(chuàng)新互聯(lián)
文章分享:http://aaarwkj.com/article20/dedsco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、商城網(wǎng)站、網(wǎng)站收錄虛擬主機、響應(yīng)式網(wǎng)站、云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
日韩精品成人一区二区三区免费| 大香蕉欧美视频伊在线| 中文字幕一区日韩欧美| 亚洲国产成人91精品| 熟女乱熟乱熟妇综合网二区| 射精视频在线观看免费| 成人永久免费播放平台| 久久亚洲女同第一区综合| 国产又粗又猛又爽黄老大爷| 日本不卡二区高清三区| 一区二区三区国产不卡| 亚洲精品在线观看午夜福利| 日日躁夜夜躁狠狠躁黑人| 日韩精品中文字幕电影| 久久免费观看性生活片| 禁止18岁以下观看的视频| 亚洲第一精品国产日韩| 国产日本福利在线综合网| 日韩欧美国产精品加勒比| 人人澡人人看人人妻| 亚洲午夜激情视频在线| 一区二区三区中文在线播放| 欧美香蕉视频播放二区| 一级片一区二区中文字幕| 亚洲精品在线免费av| 亚洲精品中的亚洲精品| 人妻丰满熟妇九九久久| 高清美女视频亚洲免费| 亚洲av正片一区二区三区| 日韩欧美黄网站免费看| 午夜福利欧美日本视频| 一区二区三区欧美日韩| 久久一区二区视频在线观看| 男女午夜激情啪啪视频| 国产亚洲中文久久网久久| 亚洲伦理一区二区三区中文| 国产激情小网站免费看| 欧美又粗又成人大视频| 又黄又湿又刺激中文字幕| 好狼色欧美激情国产区| 韩国电视剧大全免费国语观看|