Given a binary tree, return the postorder traversal of its nodes' values.
Example:
Input:[1,null,2,3]
1 \ 2 / 3 Output:[3,2,1]
题目的要求说白了就是要我们求一棵树的后序遍历。
那就顺便复习以下吧。
前序遍历的规则:
(1)访问根节点
(2)前序遍历左子树
(3)前序遍历右子树
中序遍历的规则:
(1)中序遍历左子树
(2)访问根节点
(3)中序遍历右子树
后序遍历二叉树的规则:
(1)后序遍历左子树
(2)后序遍历右子树
(3)访问根节点
大概就是这样,需要注意的是上面的过程都是递归调用的过程,比如后序遍历中,首先后序遍历左子树,在后序遍历右子树,最后访问根节点。这里写的是后序遍历子树,这就是一个递归的暗示。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
pt(root);
return ans;
}
vector<int> ans;
void pt(TreeNode* root)
{
if(root!=NULL)
{
pt(root->left);//后序遍历左子树
pt(root->right);//后序遍历右子树
ans.push_back(root->val); //访问根节点
}
}
};
就按照上面的方法就写代码就行了,那么举一反三前序遍历和中序遍历换一下顺序就行了