//先序遍历
public void preOrder(BinaryNode root){
if(root!=null){
System.out.print(root.data+"\t");
preOrder(root.left);
preOrder(root.right);
}
}
//后序遍历
public void postOrder(BinaryNode root){
if(root!=null){
postOrder(root.left);
postOrder(root.right);
System.out.print(root.data+"\t");
}
}
//中序遍历
public void inOrder(BinaryNode root){
if(root!=null){
inOrder(root.left);
System.out.print(root.data+"\t");
inOrder(root.right);
}
}
/**
* 非迭代先序遍历
* @param root
*/
public void preOrderNoIte(BinaryNode root){
BinaryNode c;
Stack<BinaryNode> stack = new Stack<BinaryNode>();
stack.push(root);
while(!stack.empty()){
c = stack.pop();
System.out.print(c.data+"\t");
if(c.right!=null) {
stack.push(c.right);
}
if(c.left!=null) {
stack.push(c.left);
}
}
}
/**
* 非迭代中序遍历
* @param root
*/
public void inOrderNoIte(BinaryNode root){
Stack<BinaryNode> stack = new Stack<BinaryNode>();
BinaryNode c = root;
while(c!=null || !stack.empty()){
while(c!=null) {
stack.push(c);
c = c.left;
}
c= stack.pop();
System.out.print(c.data+"\t");
c = c.right;
}
}
/**
* 非迭代后序遍历
* @param root
*/
public void postOrderNoIte(BinaryNode root){
BinaryNode c,rNode = null;
Stack<BinaryNode> stack = new Stack<BinaryNode>();
c = root;
while(c!=null || !stack.empty()){
while(c !=null ){
stack.push(c);
c = c.left;
}
c = stack.pop();
while(c!=null && (c.getRight()==null || c.getRight()== rNode)){
System.out.print(c.data+"\t");
rNode = c;
if(stack.empty()){
return;
}
c = stack.pop();
}
stack.push(c);
c = c.getRight();
}
}
二叉树的遍历
最新推荐文章于 2024-10-21 08:57:50 发布