1. 程式人生 > >Java反轉二叉樹

Java反轉二叉樹

// 二叉樹節點定義
public class BinaryTreefanzhuan {

class TreeNode{
  int value;
  TreeNode left;
  TreeNode right;
}

// 遞迴
public static TreeNode invertNode(TreeNode root){
  if (root == null) return null;
   TreeNode temp = root.left;
  root.left = invertNode(root.right);
  root.right = invertNode(temp);
  return root;
}

// 非遞迴
//交換左右節點後,將這個兩個節點放入佇列,繼續下一層交換
public static TreeNode invertNode2(TreeNode root){
  if (root == null) return null;
  Queue<TreeNode> nodeQueue = new LinkedList<TreeNode>();
  while(!nodeQueue.isEmpty()){
    TreeNode current = nodeQueue.poll();
    TreeNode temp = current.left;
    current.left = current.right;
    current.right = temp;
    if (current.left != null) nodeQueue.add(current.left);
    if (current.right != null) nodeQueue.add(current.right);
    }
  return root;
}