1.説明
二分木を反転します。
2.例
入る:
出力:
3.分析
入力と出力を観察し、ノード "4"を観察対象とします。ルートノード "4"は変更されず、左の子 "2"と右の子 "7"の位置が入れ替わり、左の子 "2"が配置されていることがわかります。右の子「7」が配置されている左のサブツリーと右のサブツリーも、全体として位置を交換しています。同じルールが他のノードにも存在します。
結論に達しました
バイナリツリーを反転する操作には、次のものが含まれます。
(1)ルートノードは変更されないままである、
(2)左側のサブツリーと右側のサブツリーが入れ替えられている。
(3)左のサブツリーを反転します;
(4)右のサブツリーを反転します。
4.コード
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode invertTree(TreeNode root)
{
// 递归的终止条件
if(root == null)
return root;
// 根非空的话,交换左右子树
TreeNode cache = root.left;
root.left = root.right;
root.right = cache;
// 翻转左子树
invertTree(root.left);
// 翻转右子树
invertTree(root.right);
return root;
}
}
5.検証
6.ソース
- LeetCode 226. Invert Binary Tree
出典:LeetCode
リンク:https ://leetcode-cn.com/problems/invert-binary-tree
著作権はLeetCode Networkが所有しています。商用転載については、正式な許可書にご連絡ください。非商用転載については、出典を明記してください。