二叉樹的映象 對稱的二叉樹 Java實現

2021-09-19 07:18:03 字數 1716 閱讀 7005

題目描述

操作給定的二叉樹,將其變換為源二叉樹的映象。

輸入描述:

二叉樹的映象定義:

原二叉樹 :

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 方法一 遞迴 思路 如果乙個樹的左子樹與右子樹映象對稱,則該樹是對稱的 兩個樹互為映象的...