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