给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [1,null,2,3]
1
2
/
3
输出: [3,2,1]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
后序遍历的顺序是左孩子->右孩子->父节点,对于每个遍历到的节点,执行如下操作:
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 vector<int> postorderTraversal(TreeNode* root) { 13 vector<int> res; 14 TreeNode* node = root, *pre = NULL; 15 stack<TreeNode*> s; 16 while(node || s.size()){ 17 while(node){ 18 s.push(node); 19 node = node->left; 20 } 21 node = s.top(); 22 if(node->right && node->right != pre) 23 node = node->right; 24 else{ 25 res.push_back(node->val); 26 s.pop(); 27 pre = node; 28 node = NULL; 29 } 30 } 31 return res; 32 } 33 };
LeetCode 145. 二叉树的后序遍历(Binary Tree Postorder Traversal)
原文:https://www.cnblogs.com/wmx24/p/9494486.html