算法—二叉树翻转(递归)

244 阅读1分钟

二叉树翻转

翻转一个二叉树,就是把二叉树的每一层左右顺序倒过来;

实例

input:

     1
   /   \
  2     3
 / \   / \
4   5 6   7

output:

     1
   /   \
  3     2
 / \   / \
7   6 5   4

思路

比如上面的示例,第三层4-5-6-7经过变换后变成了7-6-5-4,顺序反过来就是翻转;

翻转二叉树的步骤一般是:
1、交换当前结点的左子结点与右子结点;
2、翻转当前结点的左子树;
3、翻转当前结点的右子树。

代码

// invertBT
// 通过递归方式翻转一颗二叉树
func invertBT(root *Node) *Node {
	if root == nil {
		return root
	}

	// 交换左右孩子节点
	root.left, root.right = root.right, root.left

	// 递归处理左右子树
	invertBT(root.left)
	invertBT(root.right)
	return root
}