赞
踩
借助队列,保存每一层遍历过的元素。定义一个size表示每一层节点数,while(size–)进行每一层的节点添加。
左右序都很方便,唯独中序不方便
递归三部曲:
TreeNode* invertTree(TreeNode* root)
if (root == NULL) return root;
swap(root->left, root->right);
invertTree(root->left);
invertTree(root->right);
分为普通迭代和统一迭代法
递归三部曲
bool compare(TreeNode* left, TreeNode* right)
if (left == NULL && right != NULL) return false;
else if (left != NULL && right == NULL) return false;
else if (left == NULL && right == NULL) return true;
else if (left->val != right->val) return false; // 注意这里我没有使用else
注意上面最后一种情况,我没有使用else,而是elseif, 因为我们把以上情况都排除之后,剩下的就是 左右节点都不为空,且数值相同的情况。
bool outside = compare(left->left, right->right); // 左子树:左、 右子树:右
bool inside = compare(left->right, right->left); // 左子树:右、 右子树:左
bool isSame = outside && inside; // 左子树:中、 右子树:中(逻辑处理)
return isSame;
如上代码中,我们可以看出使用的遍历方式,左子树左右中,右子树右左中,所以我把这个遍历顺序也称之为“后序遍历”(尽管不是严格的后序遍历)。
只要把队列原封不动的改成栈就可以了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。