LeeCode-94. 二叉樹的中序遍歷
基本概念
- 二叉樹

二叉樹的結(jié)構(gòu)如上圖所示,由一系列左-中-右節(jié)點(diǎn)組成的樹狀數(shù)據(jù)結(jié)構(gòu),其基本結(jié)構(gòu)如下所示,由一個(gè)中間節(jié)點(diǎn)向左右分叉成兩個(gè)節(jié)點(diǎn),故稱二叉樹。

- 中序遍歷
看二叉樹基本的結(jié)構(gòu)左-中-右三個(gè)節(jié)點(diǎn),中間為Root,左邊為Left,右邊為Right。按順序排列的話有C(3,2)=6種,其中左右,右左算法類似。以中間Root為參考,固定左-右,則排序 左-中-右 為中序遍歷,中-左-右 為先序遍歷,左-右-中 為后序遍歷。
解題思路
題目要求中序遍歷,即對(duì)于所有的節(jié)點(diǎn),都是左-中-右的順序遍歷所有節(jié)點(diǎn),考慮到二叉樹結(jié)構(gòu)本身的特殊性,采用指針依次訪問,比較難以遍歷全局。考慮到整棵樹本身可以看作一個(gè)基本節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)本身又是一個(gè)基本節(jié)點(diǎn),如下圖所示,類似想到遞歸調(diào)用。先寫出基本結(jié)構(gòu)的調(diào)用順序,再依次對(duì)各子節(jié)點(diǎn)做遞歸調(diào)用。

實(shí)現(xiàn)代碼
vector<int> inorderTraversal(TreeNode* root) {
vector<int> result;
if (root)
{
if (root->left)
{
auto temp = inorderTraversal(root->left);
result.insert(result.end(), temp.begin(), temp.end());
}
result.push_back(root->val);
if (root->right)
{
auto temp = inorderTraversal(root->right);
result.insert(result.end(), temp.begin(), temp.end());
}
}
return result;
}
作者:robot2017
出處:http://www.rzrgm.cn/stephen2023/p/18397395
版權(quán):本文版權(quán)歸作者和博客園共有
轉(zhuǎn)載:歡迎轉(zhuǎn)載,但未經(jīng)作者同意,必須保留此段聲明;必須在文章中給出原文連接;否則必究法律責(zé)任
出處:http://www.rzrgm.cn/stephen2023/p/18397395
版權(quán):本文版權(quán)歸作者和博客園共有
轉(zhuǎn)載:歡迎轉(zhuǎn)載,但未經(jīng)作者同意,必須保留此段聲明;必須在文章中給出原文連接;否則必究法律責(zé)任
浙公網(wǎng)安備 33010602011771號(hào)