您的位置:首页 > 其它

二叉树的遍历--递归及非递归实现

2016-05-08 09:12 148 查看

二叉树的遍历分为前序,中序和后序遍历,层序遍历与深度遍历方法也很重要。

在这里,深度遍历方法用到了栈这种数据结构,广度遍历方法用到了队列这种数据结构。

1.二叉树的链式存储

typedef char datatype;

typedef struct BinNode{
datatype data;
struct BinNode* lchild;
struct BinNode* rchild;
}BinNode;

typedef BinNode* bintree;

2.遍历的实现--递归实现

//前序遍历
void preorder(bintree t){
if(t){
printf("%c",t->data);
if(t->lchild) preorder(t->lchild);
if(t->rchild) preorder(t->rchild);
}
}
//中序遍历
void midorder(bintree t){
if(t){
if(t->lchild) midorder(t->lchild);
printf("%c",t->data);
if(t->rchild) preorder(t->rchild);
}
}

3.遍历的实现--非递归实现

 

//二叉树深度优先遍历,是使用栈结构 ;   广度优先搜索类似,实用的是队列结构
public void depthOrderedTravel(){
if(root==null){
System.out.print("二叉树为空");
return 0;
}
ArrayDeque<treeNode> stack = new ArrayDeque<treeNode>();
stack.push(root);
while(stack.imEmpty()==false){
treeNode node = stack.pop();
System.out.print(node.value+" ");
if(node.right!=null)
stack.push(node.left);
if(node.left!=null)
stack.push(node.right);
}

}

  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: