题目
给你一棵 完美 二叉树的根节点
root
,请你反转这棵树中每个 奇数 层的节点值。
- 例如,假设第 3 层的节点值是
[2,1,3,4,7,11,29,18]
,那么反转后它应该变成[18,29,11,7,4,3,1,2]
。反转后,返回树的根节点。
完美 二叉树需满足:二叉树的所有父节点都有两个子节点,且所有叶子节点都在同一层。
节点的 层数 等于该节点到根节点之间的边数。
解题思路
- 奇数层,右子树的右子节点和左子树的左子节点交换,左子树的右子节点和右子树的左子节点交换。
代码展示
class Solution { public TreeNode reverseOddLevels(TreeNode root) { dfs(root.left,root.right,0); return root; } private void dfs(TreeNode left, TreeNode right, int index){ if(left == null){ return; } if(index % 2 == 0) { int temp = left.val; left.val = right.val; right.val = temp; } index++; dfs(left.left,right.right,index); dfs(left.right,right.left,index); } }