C++樹之遍歷二叉樹實(shí)例詳解
在講遍歷之前,我們要先創(chuàng)建一個(gè)樹:
#include <iostream> using namespace std; typedef struct node; typedef node *tree; struct node{ int data; // 結(jié)點(diǎn)數(shù)值 tree left,right; // 左子樹和右子樹 }; tree bt;
遍歷二叉樹有三種方式:
先序遍歷
先序遍歷的操作如下:
- 訪問根結(jié)點(diǎn)
- 先序遍歷左子樹(遞歸)
- 先序遍歷右子樹(遞歸)
二叉樹bt的先序遍歷結(jié)果:12347536
代碼如下:
void preorder(tree bt){ if (bt){ // 判斷不為空二叉樹 cout << bt->data; preorder(bt->left); // 遞歸遍歷左子樹 preorder(bt->right); // 遞歸遍歷右子樹 } }
中序遍歷
中序遍歷的操作如下:
- 中序遍歷左子樹(遞歸)
- 訪問根結(jié)點(diǎn)
- 中序遍歷右子樹(遞歸)
二叉樹bt的中序遍歷結(jié)果:7425136
代碼如下:
void inorder(tree bt){ if (bt){ // 判斷不為空二叉樹 inorder(bt->left); // 遞歸遍歷左子樹 cout << bt->data; inorder(bt->right); // 遞歸遍歷右子樹 } }
后序遍歷
后序遍歷的操作如下:
- 后序遍歷左子樹(遞歸)
- 后序遍歷右子樹(遞歸)
- 訪問根結(jié)點(diǎn)
二叉樹bt的后序遍歷的結(jié)果:7452631
代碼如下:
void postorder(tree bt){ if (bt){ // 判斷不為空二叉樹 postorder(bt->left); // 遞歸遍歷左子樹 postorder(bt->right); // 遞歸遍歷右子樹 cout << bt->data; } }
小結(jié):我們使用遞歸的方式遍歷了二叉樹,大家仔細(xì)觀察可以發(fā)現(xiàn),先序遍歷就是先訪問根結(jié)點(diǎn),再遞歸,中序遍歷是把訪問根結(jié)點(diǎn)放中間,后續(xù)遍歷是最后訪問。
總代碼:
#include <iostream> using namespace std; typedef struct node; typedef node *tree; struct node{ int data; // 結(jié)點(diǎn)數(shù)值 tree left,right; // 左子樹和右子樹 }; tree bt; void preorder(tree bt){ if (bt){ // 判斷不為空二叉樹 cout << bt->data; preorder(bt->left); // 遞歸遍歷左子樹 preorder(bt->right); // 遞歸遍歷右子樹 } } void inorder(tree bt){ if (bt){ // 判斷不為空二叉樹 inorder(bt->left); // 遞歸遍歷左子樹 cout << bt->data; inorder(bt->right); // 遞歸遍歷右子樹 } } void postorder(tree bt){ if (bt){ // 判斷不為空二叉樹 postorder(bt->left); // 遞歸遍歷左子樹 postorder(bt->right); // 遞歸遍歷右子樹 cout << bt->data; } }
補(bǔ)充知識(shí):
表達(dá)式:a+b*c
表達(dá)式二叉樹:
前綴表達(dá)式(波蘭式):+a*bc
中綴表達(dá)式:a+b*c/d
后綴表達(dá)式(逆波蘭式):abc*+
怎么將中綴表達(dá)式轉(zhuǎn)換為前綴表達(dá)式或后綴表達(dá)式呢?只需像前序遍歷和后序遍歷一樣遍歷表達(dá)二叉樹即可。
總結(jié)
到此這篇關(guān)于C++樹之遍歷二叉樹的文章就介紹到這了,更多相關(guān)C++遍歷二叉樹內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MFC擴(kuò)展DLL中導(dǎo)出類和對(duì)話框的實(shí)現(xiàn)方法
這篇文章主要介紹了MFC擴(kuò)展DLL中導(dǎo)出類和對(duì)話框的實(shí)現(xiàn)方法,詳細(xì)講述了實(shí)現(xiàn)擴(kuò)展DLL中導(dǎo)出類和對(duì)話框的具體步驟與方法,具有不錯(cuò)的實(shí)用價(jià)值,需要的朋友可以參考下2014-10-10C++實(shí)現(xiàn)LeetCode(237.刪除鏈表的節(jié)點(diǎn))
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(237.刪除鏈表的節(jié)點(diǎn)),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08C++實(shí)現(xiàn)LeetCode(119.楊輝三角之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(119.楊輝三角之二),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07