二叉樹的鏡像問題

輸入一顆二元查找樹,將該樹轉換爲它的鏡像,即在轉換後的二元查找樹中,左子樹的結點都大於右子樹的結點。用遞歸和循環兩種方法完成樹的鏡像轉換。java

分析:node

(1)遞歸的思想很簡單:若是左子樹和右子樹都已經完成了鏡像轉換,則直接將它們在根節點下的順序交換一下,整棵樹就完成了鏡像轉換;數據結構

(2)循環:問題實際上要將每一個節點的孩子的左右順序交換一下,因此用廣度優先的順序遍歷一遍就行,求解過程當中須要隊列做爲輔助數據結構。spa

// 獲得二叉樹的鏡像(遞歸方式實現)
public void mirror(Node root) {
  if (root == null||root.left == null || root.right == null) {
return;   }   // System.out.print(root.data);   Node temp = root.left;   root.left = root.right;   root.right = temp;   // 遞歸二叉樹的左右節點   if (root.left!=null) {    mirror(root.left);   }if (root.right!=null) {    mirror(root.right);   } }

// 獲得二叉樹的鏡像(循環方式實現)
public void mirror1(Node root) {
  LinkedList<Node> queue=new LinkedList<>();
  queue.add(root);
  while (queue.size()!=0) {
    // System.out.print(root.data);
    Node node=queue.removeFirst();
    if(node.left!=null)
      queue.add(node.left);
    if(node.right!=null)
      queue.add(node.right);
    Node temp = node.left;
    node.left = node.right;
    node.right = temp;
  }
}blog

相關文章
相關標籤/搜索