二叉树的建立与遍历完整代码_腾讯面试官这样问我二叉树,我刚好都会
生活随笔
收集整理的這篇文章主要介紹了
二叉树的建立与遍历完整代码_腾讯面试官这样问我二叉树,我刚好都会
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前記
上周我投遞出了簡歷,崗位是后端開發工程師。這周騰訊面試官給我進行了視頻面試。面試過程中他問了二叉樹的問題。
二叉樹相關算法題,在面試中出現的次數非常非常多,所以我面試之前也有所準備。今天結合面試問題詳細講一講二叉樹,結合實例分析二叉樹的存儲結構的建立方法和遍歷過程。
面試官
面試問題
面試官大佬:看你的簡歷上寫熟悉數據結構,談談二叉樹遍歷的方式?
我:(這可難不倒我)
先序遍歷
先訪問根節點,后依次訪問左孩子和右孩子
遞歸算法
void PreOrder1(BTREE bt) //遞歸先根遍歷 {if (bt){if (bt->data != '#'){printf(" %c", bt->data);//結點不空 ,打印結點值 }PreOrder1(bt->lchild);//依次訪問左右節點 PreOrder1(bt->rchild);}}復制代碼非遞歸算法
void PreOrder2(BTREE p)//非遞歸先根遍歷 ,先訪問根節點,后依次訪問左孩子和右孩子 {int top = -1;node *Q[N];while (p != NULL || top != -1){while (p != NULL){if (p->data != '#'){printf(" %c", p->data);}Q[++top] = p;p = p->lchild;}if (top != -1){p = Q[top--];p = p->rchild;}}}復制代碼中序遍歷
先訪問左孩子,后依次訪問根節點和右孩子
遞歸算法
void InOrder1(BTREE bt)//遞歸中序遍歷{if (bt){InOrder1(bt->lchild);//先訪問左節點 if (bt->data != '#'){printf(" %c", bt->data);//結點不空 ,打印結點值 }InOrder1(bt->rchild);//先訪問右節點 }}復制代碼非遞歸算法
void InOrder2(BTREE p)//非遞歸中序遍歷,先訪問左孩子,然后訪問根節點,后訪問右孩子{int top = -1;node *Q[N];while (p != NULL || top != -1){while (p != NULL){Q[++top] = p;p = p->lchild;}if (top != -1){p = Q[top--];if (p->data != '#'){printf(" %c",p->data);}p = p->rchild;}}}復制代碼后序遍歷
先訪問左孩子孩子,后依次訪問右孩子和根節點
遞歸算法
void PostOrder1(BTREE bt)//后序遍歷 {if (bt){PostOrder1(bt->lchild);//先訪問左,右孩子節點 PostOrder1(bt->rchild);if (bt->data != '#'){printf(" %c", bt->data);//后訪問根節點 }}}非遞歸算法
void PostOrder2(BTREE p)//非遞歸后序遍歷 ,先訪問左孩子,然后訪問右孩子,后訪問根節點 {int top = -1;node *Q[N];int flag[N] = { 0 };while (p != NULL || top != -1){while (p != NULL){top++;Q[top] = p;flag[top] = 1;p = p->lchild;}while (top != -1 && flag[top] == 2){if (Q[top]->data != '#'){printf(" %c", Q[top]->data);top--;}}if (top != -1){flag[top] = 2;p = Q[top]->rchild;}}}復制代碼面試題目
面試官大佬:你回答得很好,還有其他遍歷方式嗎
我:……
沉默了幾秒,我(這可難不倒我):還有一種層序遍歷
層序遍歷
從根開始,依次向下,對于每一層從左向右遍歷
//層序遍歷 void Sequense(BTREE bt)//建立棧,依次將根節點,左孩子,右孩子壓棧 ,并打印棧頂元素 {node *Q[N];node *p;int front = 0, top = 0;if (bt != NULL){Q[++top] = bt;//將根節點壓棧while (front < top) //遍歷棧 {p = Q[++front];if (p->data != '#'){printf(" %c", p->data);//打印棧頂元素 }if (p->lchild){Q[++top] = p->lchild;//將左孩子壓棧}if (p->rchild){Q[++top] = p->rchild;//將右孩子壓棧}}}}遍歷算法總結
面試題目
面試官大佬:如何判斷是否完全二叉樹呢
我:(這可難不倒我)
判斷完全二叉樹
總結
咱們玩歸玩,鬧歸鬧,別拿面試開玩笑。
二叉樹的遍歷雖然簡單,但遍歷方式多樣,也有遞歸算法和非遞歸算法之分。一旦問到了,大家一定要回答全面,不要丟三落四,回答到點上。二叉樹相關算法題,在面試中出現的次數非常非常多,大家面試前要把二叉樹等數據結構的基礎打牢。
總結
以上是生活随笔為你收集整理的二叉树的建立与遍历完整代码_腾讯面试官这样问我二叉树,我刚好都会的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图片大_2020跨年图片 元旦快乐祝福图
- 下一篇: 多选框实现全选_Angular1.x-c