前言:
现在同学们对“java后序遍历”都比较注重,大家都需要剖析一些“java后序遍历”的相关内容。那么小编在网络上收集了一些有关“java后序遍历””的相关内容,希望姐妹们能喜欢,同学们快快来了解一下吧!题目:
给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1]
思路:
递归写法简单,这里介绍迭代算法。
先序遍历的顺序:中->左->右
后序遍历的顺序:左->右->中
观察这两个遍历顺序,可以发现通过如下变化,在先序遍历的基础上转换成后序遍历:
1. 先序遍历,左右顺序互换:中->右->左,把结果存到数组里
2. 把结果数组进行反转,得到:左->右->中,也就是后序遍历的结果
综上:只需在“算法:二叉树的前序遍历”代码基础上按照规则修改就行。
代码:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */class Solution {public: vector<int> postorderTraversal(TreeNode* root) { vector<int> v; if(!root) return v; //先序遍历 stack<TreeNode*> stk; stk.push(root); while(!stk.empty()) { TreeNode* node = stk.top(); stk.pop(); v.push_back(node->val); if(node->left) stk.push(node->left); if(node->right) stk.push(node->right); } //反转 for(int i=0; i<v.size()/2; i++) { swap(v[i], v[v.size()-1-i]); } return v; }};