java实现二叉遍历-总结
白话描述:尽量统一队形,最后发现递归全部可以统一队形,迭代的话,前后可以,中不可以
白话实现:原因在于,前跟后的区别就是list的add跟addfirst
//递归:
public void qianxubianlihelp1(TreeNode root, List l){
if(root!=null){
l.add(root.data);
if(root.left!=null) qianxubianlihelp1(root.left,l);
if(root.right!=null) qianxubianlihelp1(root.right,l);
}
}
public List qianxubianli1(TreeNode root){
LinkedList <Integer> l=new LinkedList();
qianxubianlihelp1(root,l);
return l;
}
public void zhongxubianlihelp1(TreeNode root, List l){
if(root!=null){
if(root.left!=null) zhongxubianlihelp1(root.left,l);
l.add(root.data);
if(root.right!=null) zhongxubianlihelp1(root.right,l);
}
}
public List zhongxubianli1(TreeNode root){
LinkedList<Integer> l=new LinkedList();
zhongxubianlihelp1(root,l);
return l;
}
public void houxubianlihelp1(TreeNode root, List l){
if(root!=null){
if(root.left!=null) houxubianlihelp1(root.left,l);
if(root.right!=null) houxubianlihelp1(root.right,l);
l.add(root.data);
}
}
public List houxubianli1(TreeNode root){
LinkedList<Integer> l=new LinkedList();
houxubianlihelp1(root,l);
return l;
}
//迭代:
public List qianxubianli2(TreeNode root){
LinkedList<Integer> l=new LinkedList();
LinkedList<TreeNode> stack=new LinkedList();
if(root==null) return l;
stack.add(root);
while(!stack.isEmpty()){
TreeNode tmp=stack.pollLast();
l.add(tmp.data);
if(tmp.right!=null) stack.add(tmp.right);
if(tmp.left!=null) stack.add(tmp.left);
}
return l;
}
public List zhongxubianli3(TreeNode root){
LinkedList<Integer> l=new LinkedList();
Stack<TreeNode> s=new Stack();
if(root==null) return l;
TreeNode tmp=root;
while(tmp!=null||!s.isEmpty()){
while(tmp!=null){
s.push(tmp);
tmp=tmp.left;
}
tmp=s.pop();
l.add(tmp.data);
tmp=tmp.right;
}
return l;
}
public List houxukbianli2(TreeNode root){
LinkedList<Integer> l=new LinkedList();
LinkedList<TreeNode> stack=new LinkedList();
if(root==null) return l;
stack.add(root);
while(!stack.isEmpty()){
TreeNode tmp=stack.pollLast();
l.addFirst(tmp.data);
if(tmp.left!=null) stack.add(tmp.left);
if(tmp.right!=null) stack.add(tmp.right);
}
return l;
}