该题目用Java实现最好的方式是队列实现。
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
/**
* @param root: a TreeNode, the root of the binary tree
* @return: nothing
*/
public void invertBinaryTree(TreeNode root) {
if (root==null)
{
<span style="white-space:pre"> </span>return ;
}
Queue<TreeNode> queue =new ArrayDeque<TreeNode>();
queue.offer(root);
while (!queue.isEmpty())
{
<span style="white-space:pre"> </span>TreeNode node=queue.peek();
<span style="white-space:pre"> </span>TreeNode temp=node.left;
<span style="white-space:pre"> </span>node.left=node.right;
node.right=temp;
<span style="white-space:pre"> </span>queue.poll();
<span style="white-space:pre"> </span>if (node.left!=null){
<span style="white-space:pre"> </span>queue.offer(node.left);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>if (node.right!=null){
<span style="white-space:pre"> </span>queue.offer(node.right);
<span style="white-space:pre"> </span>}
}
}
}
关于队列,下表显示了jdk1.5中的阻塞队列的操作:
add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
offer 添加一个元素并返回true 如果队列已满,则返回false
poll 移除并返问队列头部的元素 如果队列为空,则返回null
peek 返回队列头部的元素 如果队列为空,则返回null
put 添加一个元素 如果队列满,则阻塞
take 移除并返回队列头部的元素 如果队列为空,则阻塞