文章目录
- 前言
- 题目
- 解决方案一
- 1.1 思路阐述
- 1.2 源码
- 解决方案二
- 总结
前言
和前序遍历中序遍历一致,换个顺序就行。
详情参考C/C++ BM23 二叉树的前序遍历
详情参考C/C++ BM24 二叉树的中序遍历
题目
给定一个二叉树,返回他的后序遍历的序列。
后序遍历是值按照 左节点->右节点->根节点 的顺序的遍历。
数据范围:二叉树的节点数量满足 1 ≤ n ≤ 100 1≤n≤100 1≤n≤100,二叉树节点的值满足 1 ≤ v a l ≤ 100 1≤val≤100 1≤val≤100,树的各节点的值各不相同
输入:
{ 1 , # , 2 , 3 } \{1,\#,2,3\} {1,#,2,3}
返回值:
[ 3 , 2 , 1 ] [3,2,1] [3,2,1]
输入:
{ 1 } \{1\} {1}
返回值:
[ 1 ] [1] [1]
解决方案一
1.1 思路阐述
后序遍历是是什么:
一棵树有根节点,根节点下面有左子树和右子树。左子树和右子树的根节点为这棵树根节点的左节点和右节点。
后序遍历的意思就是,左右根。先遍历左子树和右子树再遍历根节点。
1.2 源码
/*** struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* };*/
class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param root TreeNode类 * @return int整型vector*/vector<int> temp;vector<int> postorderTraversal(TreeNode* root) {if(!root)//如果节点为空,则返回原数组return temp;postorderTraversal(root->left);//遍历当前子树的左节点postorderTraversal(root->right);//遍历当前子树的右节点temp.push_back(root->val);//不为空则表示遍历到这个节点,将这个节点的值添加到数组中return temp;}
};
解决方案二
这个我就不贴了,都一样的。顶多就是把函数功能单独拎出来。
总结
明白了前序和中序遍历,这个后序遍历也非常简单。