递归程序:
class TreeNode{
TreeNode left;
TreeNode right;
int data;
}
public class Tree1 {
public static void Exchange(TreeNode head){
if(null==head||(head.left==null&&head.right==null)){
return;
}
TreeNode p = head.left;
head.left=head.right;
head.right=p;
if(head.left!=null){
Exchange(head.left);
}
if(head.right!=null){
Exchange(head.right);
}
return;
}
public static TreeNode buildTree() {
TreeNode root = new TreeNode();
root.data = 1;
TreeNode temp = new TreeNode();
temp.data = 2;
root.left = temp;
temp = new TreeNode();
temp.data = 3;
root.right = temp;
temp = new TreeNode();
temp.data = 4;
root.right.right = temp;
temp = new TreeNode();
temp.data = 5;
root.left.right = temp;
temp = new TreeNode();
temp.data = 6;
root.left.right.right = temp;
return root;
}
public static void inOrderVisit(TreeNode root) {
if (root == null)
return;
inOrderVisit(root.left);
System.out.print(root.data);
inOrderVisit(root.right);
}
public static void main(String[] args){
TreeNode root = buildTree();
inOrderVisit(root);
Exchange(root);
System.out.println();
inOrderVisit(root);
}
}
非递归程序:
import java.util.Stack;
class TreeNode{
TreeNode left;
TreeNode right;
int data;
}
public class Tree2 {
public static void swapTree(TreeNode root){
Stack<TreeNode> s = new Stack<TreeNode>();
TreeNode p;
if(null==root)return;
s.push(root);
while(!s.isEmpty()){
root = s.pop();
p = root.left;
root.left=root.right;
root.right=p;
if(root.left!=null){
s.push(root.left);
}
if(root.right!=null){
s.push(root.right);
}
}
}
public static TreeNode buildTree() {
TreeNode root = new TreeNode();
root.data = 1;
TreeNode temp = new TreeNode();
temp.data = 2;
root.left = temp;
temp = new TreeNode();
temp.data = 3;
root.right = temp;
temp = new TreeNode();
temp.data = 4;
root.right.right = temp;
temp = new TreeNode();
temp.data = 5;
root.left.right = temp;
temp = new TreeNode();
temp.data = 6;
root.left.right.right = temp;
return root;
}
public static void inOrderVisit(TreeNode root) {
if (root == null)
return;
inOrderVisit(root.left);
System.out.print(root.data);
inOrderVisit(root.right);
}
public static void main(String[] args){
TreeNode root = buildTree();
inOrderVisit(root);
swapTree(root);
System.out.println();
inOrderVisit(root);
}
}
非递归算法使用了栈这种数据结构。