再帰的および非再帰的な方法で、二叉の木の最初の順序、中の順序、および後の順序を達成する.
3132 ワード
分析:
まず、ルートノードにアクセスして、左のツリーを巡回して、右のツリーを巡回します.
中順:左のサブツリーを巡回し、ルートノードにアクセスし、右のサブツリーを巡回します.
後の順序:左のサブツリーを巡回し、右のサブツリーを巡回してルートノードにアクセスします.
したがって、再帰的に実現するのは簡単です.
まず、ルートノードにアクセスして、左のツリーを巡回して、右のツリーを巡回します.
中順:左のサブツリーを巡回し、ルートノードにアクセスし、右のサブツリーを巡回します.
後の順序:左のサブツリーを巡回し、右のサブツリーを巡回してルートノードにアクセスします.
したがって、再帰的に実現するのは簡単です.
public class test3 {
public class Node{
private int value;
private Node leftNode;
private Node rightNode;
public Node(int value){
this.value = value;
}
}
//
public void preOrder(Node root){
if (root == null)
return;
System.out.println(root.value + " ");
preOrder(root.leftNode);
preOrder(root.rightNode);
}
//
public void innerOrder(Node root){
if (root == null)
return;
innerOrder(root.leftNode);
System.out.println(root.value + " ");
innerOrder(root.rightNode);
}
//
public void posOrder(Node root){
if (root == null)
return;
posOrder(root.leftNode);
posOrder(root.rightNode);
System.out.println(root.value + " ");
}
}
1、 stack, stack
2、 stack , cur, cur , cur , cur
3、 2, stack
public void preUncur(Node root){
if (root != null){
Stack stack = new Stack<>();
stack.add(root);
while (!stack.isEmpty()){
root = stack.pop();
if (root.rightNode != null)
stack.add(root.rightNode);
if (root.leftNode != null)
stack.add(root.leftNode);
}
}
}
1、 stack
2、 ,
3、 2
public void innerUncer(Node root){
if (root != null){
Stack stack = new Stack<>();
stack.push(root);
if (!stack.isEmpty() && root != null){
if (root != null){
stack.push(root);
root = root.leftNode;
}else {
root = stack.pop();
System.out.println(root.value + "");
root = root.rightNode;
}
}
}
}
1、 , stack stack stack1 ,
2、 , stack , ,
3、 stack stack1 , 2
public void posUncer(Node root){
if (root != null){
Stack stack = new Stack<>();
Stack stack1 = new Stack<>();
stack.push(root);
if (!stack.isEmpty()){
stack1.push(stack.pop());
if (root.leftNode != null){
stack.push(root.leftNode);
}
if (root.rightNode != null)
stack.push(root.rightNode);
}
while (!stack1.isEmpty()){
System.out.println(stack1.pop().value + "");
}
}
}