随机构建一棵树,交换每个节点的左右子树。
思路:(使用java语言)递归实现——>
(1)首先让头节点的左右子树进行交换,递归头结点的左子节点(假设为headLeft1)
(2)让headLeft1的左右子树交换,再递归headLeft1的左子节点,直到递归到叶子节点;
(3)按照以上思路再递归节点右子节点的左右子树进行交换,直到每个节点的左右节点都递归交换位置;
(4)遍历输出交换后的树。
public class SwapTree {
public static void main(String[] args) {
Node root=buildTree();
System.out.println("交换之前==============");
inOrderVisit(root);//交换之前的先序遍历
ExchangeLeftRight( root);
System.out.println();
System.out.println("交换之后==============");
inOrderVisit(root);//交换之后的先序遍历
}
//定义节点类
class Node {
int data = 0;
Node left = null;
Node right = null;
}
//创建树
public static Node buildTree(){
SwapTree s=new SwapTree();
Node root = s.new Node();
root.data = 1;
Node temp = s.new Node();
temp.data = 2;
root.left = temp;
temp = s.new Node();
temp.data = 3;
root.right = temp;
temp = s.new Node();
temp.data = 4;
root.right.right = temp;
temp = s.new Node();
temp.data = 5;
root.left.right = temp;
temp = s.new Node();
temp.data = 6;
root.left.right.right = temp;
temp = s.new Node();
temp.data = 7;
root.left.right.left=temp;
return root;
}
//先序遍历树(根左右)
public static void inOrderVisit(Node root) {
if (root == null)
return;
System.out.print(root.data);
inOrderVisit(root.left);
inOrderVisit(root.right);
}
//交换左右子树
public static void ExchangeLeftRight(Node node) {
if(node == null)//节点为空 则return
return ;
if(node.left==null && node.right==null){//当前节点是叶子节点时,return
return;
}
else{//交换左右孩子
Node temp = node.left;
node.left = node.right;
node.right = temp;
}
ExchangeLeftRight(node.left);//对左子节点进行递归,交换其左右子树
ExchangeLeftRight(node.right);//对右子节点进行递归,交换其左右子树
}
}



