演算法 對稱二叉樹

2021-10-04 18:58:53 字數 1683 閱讀 2663

給定乙個二叉樹,檢查它是否是映象對稱的。

例如,二叉樹 [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

程式入口:

treenode root2 = new treenode(9);

root2.left = new treenode(-42);

root2.right = new treenode(-42);

root2.left.left = null;

root2.left.right = new treenode(76);

root2.right.left = new treenode(76);

root2.right.right = null;

root2.left.right.right = new treenode(13);

root2.right.left.right = new treenode(13);

boolean symmetric = issymmetric(root2);

system.out.println(symmetric);

public static boolean issymmetric(treenode root) 

return issymmetricreverse(root,root);

}private static boolean issymmetricreverse(treenode left,treenode right) else if (left == null || right == null)

return left.val == right.val && issymmetricreverse(left.left,right.right) && issymmetricreverse(left.right,right.left);

}

解決方法二:

public static boolean issymmetric2(treenode root) 

linkedliststack = new linkedlist<>();

//第乙個孩子單獨處理下

if (root.left == null && root.right == null) else if (root.left == null || root.right == null)

stack.offer(root.left);

stack.offer(root.right);

while (!stack.isempty())else if (left == null || right ==null)

if (left.val != right.val)

stack.offer(left.left);

stack.offer(right.right);

stack.offer(left.right);

stack.offer(right.left);

}return true;

}

演算法 對稱二叉樹

給定乙個二叉樹,檢查它是否是映象對稱的。參考官方解法,使用兩種方式完成 1.遞迴 如果乙個樹的左子樹與右子樹映象對稱,那麼這個樹是對稱的。如果同時滿足下面的條件,兩個樹互為映象 它們的兩個根結點具有相同的值每個樹的右子樹都與另乙個樹的左子樹映象對稱 我們可以實現這樣乙個遞迴函式,通過 同步移動 兩個...

對稱二叉樹c 對稱的二叉樹

很簡單,關鍵還是知道怎麼樣才能判斷乙個 二叉樹是否對稱,只要採用前序 中序 後序 層次遍歷等任何一種遍歷方法,分為先左後右和先 右後左兩種方法,只要兩次結果相等就說明這棵樹是一顆對稱二叉樹。迭代版本 class solution public bool issymmetric treenode ro...

演算法 判斷對稱二叉樹

給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 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示例 輸入 2,1,5,6,2,3 輸出 10說實話這道題我想了挺久的,可能太久沒接觸過二叉...