首页 > 其他 > 详细

二叉树的遍历

时间:2014-03-11 21:28:03      阅读:499      评论:0      收藏:0      [点我收藏+]

遍历二叉树的三种方法:

前序:根节点->左子树->右子树

中序:左子树->根节点->右子树

后序:左子树->右子树->根节点

前序遍历的递归算法:

bubuko.com,布布扣
public void preOrderRecursion(BinaryTreeNode root,List list){

if(root==null) return ;
list.insertLast(root);
preOrderRecursion(root.getLChild(),list);
preOrderRecursion(root.getRChild(),list);
}
bubuko.com,布布扣

 

中序遍历的递归算法:

bubuko.com,布布扣
public void inOrderRecursion(BinaryTreeNode root,List list){

if(root==null) return ;
inOrderRecursion(root.getLChild(),list);
list.insertLast(root);
inOrderRecursion(root.getRChild(),list);
}
bubuko.com,布布扣

 

后序遍历的递归算法:

bubuko.com,布布扣
public void postOrderRecursion(BinaryTreeNode root,List list){

if(root==null) return ;

postOrderRecursion(root.getLChild(),list);
postOrderRecursion(root.getRChild(),list);
list.insertLast(root);
}
bubuko.com,布布扣

 

前序遍历的非递归算法:

bubuko.com,布布扣
public void preOrderTraverse(BinaryTreeNode root,List list){
if(root==null)return;
Stack s=new Stack();//堆栈
while(root!=null){
   while(root!=null){
       list.insertLast(root);
       if(root.getRChild()!=null)s.push(root.getRhild());
       root=root.getLChild();
   }
   if(!s.isEmpty()) root=(BinaryTreeNode)s.pop();
}
}
bubuko.com,布布扣

 

中序遍历的非递归算法:

bubuko.com,布布扣
public void inOrderTraverse(BinaryTreeNode root,List list){
if(root==null)return;
Stack s=new Stack();//堆栈
while(root!=null||!s.isEmpty()){
   while(root!=null){
       s.push(root);
       root=root.getLChild();
   }
   if(!s.isEmpty()) {
      root=(BinaryTreeNode)s.pop();
      list.insertLast(root);
      root=root.getRChild();
}
}
}
bubuko.com,布布扣

 

后序遍历的非递归算法:

bubuko.com,布布扣
public void postOrderTraverse(BinaryTreeNode root,List list){
if(root==null)return;
Stack s=new Stack();//堆栈
while(root!=null||!s.isEmpty()){
   while(root!=null){
       s.push(root);
       if(root.getLChild()!=null)root=root.getRhild();
       else root=root.getRChild();
   }
   if(!s.isEmpty()) {
         root=(BinaryTreeNode)s.pop();
         list.insertLast(root);
}
   while(!s.isEmpty()&&((BinaryTreeNode)s.peek()).getRChild()==root){
       root=s.pop();
       list.insertLast(root);
}
   if(!s.isEmpty())
       root=((BinaryTreeNode)s.peek()).getRChild();
   else p=null;
}
}
bubuko.com,布布扣

二叉树的遍历,布布扣,bubuko.com

二叉树的遍历

原文:http://www.cnblogs.com/gdyang/p/3593469.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!