Question:
4
/ \
2 7
/ \ / \
1 3 6 9
to
4
/ \
7 2
/ \ / \
9 6 3 1
code:
class TreeNode {
int key;
String data;
TreeNode left;
TreeNode right;
TreeNode() {
}
TreeNode(int key, String data) {
this.key = key;
this.data = data;
left = null;
right = null;
}
}
public class TreeNodeDemo {
public static TreeNode invertTree(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
while (!queue.isEmpty()) {
TreeNode current = queue.poll();
TreeNode tmp = current.left;
current.left = current.right;
current.right = tmp;
if (current.left != null)
queue.add(current.left);
if (current.right != null)
queue.add(current.right);
}
//System.out.println(root.left.left.data);
return root;
}
public static TreeNode invertTree2(TreeNode root) {
if (root == null) {
return null;
}
TreeNode left = invertTree2(root.left);
TreeNode right = invertTree2(root.right);
root.right = left;
root.left = right;
if(root.left != null){
System.out.println(root.right.data);
}
return root;
}
public static void main(String[] args) {
TreeNode root = new TreeNode(1, "rootA");
TreeNode nodeB = new TreeNode(2, "B");
TreeNode nodeC = new TreeNode(3, "C");
TreeNode nodeD = new TreeNode(4, "D");
TreeNode nodeE = new TreeNode(5, "E");
TreeNode nodeF = new TreeNode(6, "F");
TreeNode nodeG = new TreeNode(7, "G");
root.left = nodeB;
root.right = nodeC;
nodeB.left = nodeD;
nodeB.right = nodeE;
nodeC.left = nodeF;
nodeC.right = nodeG;
// invertTree(root);
invertTree2(root);
}
}