写完才知道自己学习都是似是而非啊,大家可以也在leecode上提交代码,纯手写,离开eclipse
第一种方式:数据结构书上的,使用栈大概思路。
1.不断将根节点的左孩子的左孩子直到为空,在这个过程入栈。
2.因为栈顶的节点的左孩子为空,所以栈顶的的节点的左子树肯定访问完毕,所以出栈后直接指向右孩子。其实这里面有个思想
迭代和递归的本质相同之处是什么?以后会写一篇我的思考。
public class Solution {
public List preorderTraversal(TreeNode root) {
ArrayList arry=new ArrayList();
if(root==null) return arry;
Stack s=new Stack();
TreeNode t=root;
while(t!=null||!s.isEmpty())
{
while(t!=null)
{
arry.add(t.val);
s.push(t);
t=t.left;
}
if(!s.isEmpty())
{
TreeNode tn=s.pop();
t=tn.right;
}
}
return arry;
}
}
public class Solution {
public List postorderTraversal(TreeNode root) {
//只能使用非递归方式,来获得List
ArrayList arry=new ArrayList();
Stack s=new Stack();
s.push(root);
while(!s.isEmpty())
{
TreeNode t=s.pop();
arry.add(t.val);
if(t.left!=null) s.push(t.left);
if(t.right!=null) s.push(t.right);
}
return arry;
}
}