題目描述
操作給定的二叉樹,將其變換為源二叉樹的映象。
輸入描述:
二叉樹的映象定義:
原二叉樹 :
8/ \
6 10
/ \ / \
5 7 9 11
映象二叉樹:
8/ \
10 6
/ \ / \
11 9 7 5
思路分析:
先前序遍歷這棵樹的每個結點,如果遍歷的節點有子節點,那麼就進行左右子節點的交換。
遞迴實現:
public void mirror(treenode root)
treenode tmp = null;
tmp = root.left;
root.left = root.right;
root.right = tmp;
if (root.left != null )
if (root.right != null)
}
非遞迴實現:
public void mirror(treenode proot)
stackstack = new stack<>();
stack.push(proot);
while (!stack.isempty())
if (node.left != null)
if (node.right != null)
}}
題目描述:
請實現乙個函式,用來判斷一顆二叉樹是不是對稱的。注意,如果乙個二叉樹同此二叉樹的映象是同樣的,定義其為對稱的。
思路分析:
例如一下二叉樹,這就是個典型的對稱二叉樹。對稱二叉樹是必須滿足映象對稱,也就是從根節點中間切開,對折可以重合。即:根節點的左子樹和右子樹相同,左子樹的左子樹和右子樹的右子樹相等,左子樹的右子樹和右子樹的左子樹相等,可以採用遞迴和非遞迴兩種方法實現。
6
/ \
8 8
/ \ / \
1 3 3 1
遞迴實現:
class treenode
}public static boolean issymmetrical(treenode proot)
return comroot(proot.left, proot.right);
}private static boolean comroot(treenode left, treenode right)
非遞迴**實現:
非遞迴實現的思路就是將每一對稱節點的左子樹和和右子樹,右子樹和左子樹新增到佇列進行判斷,注意這裡空節點即:null會新增到佇列中,但是如果取出的兩個元素為空,那麼結束當前while迴圈,重新進行取值。
public static boolean issymmetrical(treenode proot)
return true;
}
二叉樹應用 二叉樹映象(對稱)
題目 完成乙個函式,輸入乙個二叉樹,該函式輸出它的映象。如 分析 對於乙個二叉樹的映象過程,我們可以先前序遍歷這棵樹的每乙個節點,如果遍歷到的節點有子節點,就交換它的兩個子節點。當交換完所有的飛葉子節點之後,就得到了樹的映象。具體實現 struct treenode void mirrorrecur...
對稱二叉樹c 對稱的二叉樹
很簡單,關鍵還是知道怎麼樣才能判斷乙個 二叉樹是否對稱,只要採用前序 中序 後序 層次遍歷等任何一種遍歷方法,分為先左後右和先 右後左兩種方法,只要兩次結果相等就說明這棵樹是一顆對稱二叉樹。迭代版本 class solution public bool issymmetric treenode ro...
leetcode 二叉樹 對稱二叉樹
給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 1,2,2,3,4,4,3 是對稱的。1 2 2 3 4 4 3 但是下面這個 1,2,2,null,3,null,3 則不是映象對稱的 1 2 2 3 3 方法一 遞迴 思路 如果乙個樹的左子樹與右子樹映象對稱,則該樹是對稱的 兩個樹互為映象的...