LeeCode-94. 二叉树的中序遍历
基本概念
- 二叉树
二叉树的结构如上图所示,由一系列左-中-右节点组成的树状数据结构,其基本结构如下所示,由一个中间节点向左右分叉成两个节点,故称二叉树。
- 中序遍历
看二叉树基本的结构左-中-右三个节点,中间为Root,左边为Left,右边为Right。按顺序排列的话有C(3,2)=6种,其中左右,右左算法类似。以中间Root为参考,固定左-右,则排序 左-中-右 为中序遍历,中-左-右 为先序遍历,左-右-中 为后序遍历。
解题思路
题目要求中序遍历,即对于所有的节点,都是左-中-右的顺序遍历所有节点,考虑到二叉树结构本身的特殊性,采用指针依次访问,比较难以遍历全局。考虑到整棵树本身可以看作一个基本节点,每个节点本身又是一个基本节点,如下图所示,类似想到递归调用。先写出基本结构的调用顺序,再依次对各子节点做递归调用。
实现代码
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;
}