龙空技术网

算法:二叉树的后序遍历

小猿陪学 36

前言:

现在同学们对“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;    }};

标签: #java后序遍历 #后序遍历是怎么遍历的 #后序遍历的顺序 #树的先序遍历与其对应的二叉树的后序遍历序列相同