问题:
后序遍历二叉树
分析:非递归后序遍历二叉树。直接后序遍历的话会很麻烦,所以我们要想一些精妙的方法,将后序遍历改成先序遍历并满足以下两个条件即可。
1.使用链表头插法来进行先序遍历。
2.先遍历右子树再遍历左子树即可(借助栈实现,先将左节点压栈,再将右节点压栈)。
代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
LinkedList<Integer> output = new LinkedList();
if(root==null){
return output;
}
Stack s = new Stack();
TreeNode node;
s.push(root);
while(!s.empty()){ //注意记忆循环条件
node = (TreeNode)s.pop();
output.addFirst(node.val);
if(node.left!=null){
s.push(node.left);
}
if(node.right!=null){
s.push(node.right);
}
}
return output;
}
}
原文:https://www.cnblogs.com/gmzqjn/p/11677138.html