描述
给出一棵二叉树,返回其节点值的后序遍历。
您在真实的面试中是否遇到过这个题?
是
样例
给出一棵二叉树 {1,#,2,3}
,
1 \ 2 / 3
返回 [3,2,1]
挑战
你能使用非递归实现么?
递归实现较为简单;
非递归实现,较先序遍历 中序遍历 较为复杂,需要考察上一个读取的节点,如果是该节点的右孩子或者该节点没有右孩子,则该节点允许被读取。
/** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right = NULL; * } * } */ class Solution { public: /** * @param root: A Tree * @return: Postorder in ArrayList which contains node values. */ vector<int> postorderTraversal(TreeNode * root) { // write your code here vector<int> m_vector; if(root==NULL) return m_vector; stack<TreeNode*> m_stack; TreeNode * m_node=root; TreeNode * p_node=NULL; while(m_node){ m_stack.push(m_node); m_node=m_node->left; } while(!m_stack.empty()){ m_node=m_stack.top(); m_stack.pop(); if(m_node->right==NULL||m_node->right==p_node){ m_vector.push_back(m_node->val); p_node=m_node; }else{ m_stack.push(m_node); m_node=m_node->right; while(m_node){ m_stack.push(m_node); m_node=m_node->left; } } } return m_vector; } };参考资料:https://blog.csdn.net/zhangxiangdavaid/article/details/37115355