题目描述:
给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1]
解题思路:1.递归实现:按照后序遍历的定义(依次访问左右根)即可 2.非递归实现,因为涉及到最后访问根节点,所以要设一个结点来保存上一个的值。
代码实现:
1.递归实现
template<typename T>
void LastOder(TreeNode<T> *root) {//左右根依次遍历
TreeNode<T> *temp = root;
if (!temp) return;
LastOder(root->left);
LastOder(root->right);
cout << root->data << " ";
}
2.非递归实现
template<typename T>
void LastOderNoRe() {
stack<TreeNode<T> *> s;
TreeNode<T> *temp = root;
TreeNode<T> *prev = NULL;
while (temp || !s.empty()) {
while (temp) {
s.push(temp);
temp = temp->left;
}
TreeNode<T> *top = s.top();
if (top->right == NULL || prev = top->right) {//如果右树不存在或访问过,则输出
cout << top->data << " ";
prev = top;
s.pop();
}
else temp = top->right;//否则以右树为根节点遍历右树
}
cout << endl;
}