From 712ab9aa00a830eb0ef6b09ec8b20f2a9050b7da Mon Sep 17 00:00:00 2001 From: Arthur Date: Thu, 21 Oct 2021 15:31:22 +0100 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=200226.=E7=BF=BB=E8=BD=AC?= =?UTF-8?q?=E4=BA=8C=E5=8F=89=E6=A0=91.md=20C=E8=AF=AD=E8=A8=80=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0226.翻转二叉树.md | 45 ++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/problems/0226.翻转二叉树.md b/problems/0226.翻转二叉树.md index b69cad55..d27d6d80 100644 --- a/problems/0226.翻转二叉树.md +++ b/problems/0226.翻转二叉树.md @@ -473,6 +473,51 @@ var invertTree = function(root) { }; ``` +C: +递归法 +```c +struct TreeNode* invertTree(struct TreeNode* root){ + if(!root) + return NULL; + //交换结点的左右孩子(中) + struct TreeNode* temp = root->right; + root->right = root->left; + root->left = temp; + 左 + invertTree(root->left); + //右 + invertTree(root->right); + return root; +} +``` +迭代法:深度优先遍历 +```c +struct TreeNode* invertTree(struct TreeNode* root){ + if(!root) + return NULL; + //存储结点的栈 + struct TreeNode** stack = (struct TreeNode**)malloc(sizeof(struct TreeNode*) * 100); + int stackTop = 0; + //将根节点入栈 + stack[stackTop++] = root; + //若栈中还有元素(进行循环) + while(stackTop) { + //取出栈顶元素 + struct TreeNode* temp = stack[--stackTop]; + //交换结点的左右孩子 + struct TreeNode* tempNode = temp->right; + temp->right = temp->left; + temp->left = tempNode; + //若当前结点有左右孩子,将其入栈 + if(temp->right) + stack[stackTop++] = temp->right; + if(temp->left) + stack[stackTop++] = temp->left; + } + return root; +} +``` + ----------------------- * 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw) * B站视频:[代码随想录](https://space.bilibili.com/525438321)