博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
镜像二叉树(递归/非递归)
阅读量:2242 次
发布时间:2019-05-09

本文共 801 字,大约阅读时间需要 2 分钟。

镜像二叉树:根节点的左右孩子交换

            所有节点的左右孩子都交换
例如:
在这里插入图片描述

递归

递推公式:根节点的左子树和右子树换位置

终止条件:空树

void MirrorTree(BNode *root)	{		if (root == NULL)		{			return;		}		BNode *tmp = root->left;		root->left = root->right;		root->right = tmp;		MirrorTree(root->left);		MirrorTree(root->right);	}

非递归

如果用非递归,就要用到循环和栈,先进后出。

第一步:先将根节点压栈
第二步:保存栈顶元素并出栈
第三步:将栈顶元素的左右孩子换位置
第四步:判断左右孩子是否为空,如果不是空,压栈
注:一定要记得出栈,要不然就会变成死循环

void MirrorTree2(BNode *root)	{		if (root == NULL)		{			return;		}		Stack stack;		StackInit(&stack);		StackPush(&stack, root);		while (!StackEmpty(&stack))		{			BNode *node = StackTop(&stack);			StackPop(&stack);				BNode *tmp = node->left;			node->left = node->right;			node->right = tmp;				if (node->left)			{				StackPush(&stack, node->left);			}			if (node->right)			{				StackPush(&stack, node->right);			}		}	}
你可能感兴趣的文章
一个框架解决几乎所有机器学习问题
查看>>
特征工程怎么做
查看>>
机器学习算法应用中常用技巧-1
查看>>
决策树的python实现
查看>>
了解 Sklearn 的数据集
查看>>
如何选择优化器 optimizer
查看>>
一文了解强化学习
查看>>
CART 分类与回归树
查看>>
seq2seq 的 keras 实现
查看>>
seq2seq 入门
查看>>
什么是 Dropout
查看>>
用 LSTM 做时间序列预测的一个小例子
查看>>
用 LSTM 来做一个分类小问题
查看>>
详解 LSTM
查看>>
按时间轴简述九大卷积神经网络
查看>>
详解循环神经网络(Recurrent Neural Network)
查看>>
为什么要用交叉验证
查看>>
用学习曲线 learning curve 来判别过拟合问题
查看>>
用验证曲线 validation curve 选择超参数
查看>>
用 Grid Search 对 SVM 进行调参
查看>>