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ǔ)充知識:
表達(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MFC擴(kuò)展DLL中導(dǎo)出類和對話框的實(shí)現(xiàn)方法
這篇文章主要介紹了MFC擴(kuò)展DLL中導(dǎo)出類和對話框的實(shí)現(xiàn)方法,詳細(xì)講述了實(shí)現(xiàn)擴(kuò)展DLL中導(dǎo)出類和對話框的具體步驟與方法,具有不錯(cuò)的實(shí)用價(jià)值,需要的朋友可以參考下2014-10-10
C++實(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-08
C++實(shí)現(xiàn)LeetCode(119.楊輝三角之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(119.楊輝三角之二),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07

