使用栈完成二叉树前/后序遍历
先上代码
/**
* 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> preorderTraversal(TreeNode root) {
LinkedList<TreeNode> stack = new LinkedList<>();
//用List代表栈
LinkedList<Integer> output= new LinkedList<>();
//List代表输出序列’
if(root == null){
return output;
}
stack.add(root);
//首先加入根节点
while(!stack.isEmpty()){
TreeNode node = stack.pollLast();
//先出尾节点
output.add(node.val);
if(node.right != null){
//先压入右节点
stack.add(node.right);
}
if(node.left != null){
//再压入做节点
stack.add(node.left);
}
}
return output;
}
}
如果后序遍历
只要把 output.add(node.val);改为output.addFirst(node.val);就可以了。
考,这犯规了,但是确实可以…我根本没想到…
总结
可以手动模拟一下过程就很好理解了。
算法还是要自己去理解的,只能靠自己。