尷尬了,昨天被問,忽然不知道咋搞。node
二叉樹遍歷,前中後,是以root爲準的前中後blog
因此反轉二叉樹用後續遍歷就好遞歸
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */
遞歸it
struct TreeNode* invertTree(struct TreeNode* root) { struct TreeNode *node; if (root == NULL) return root; node = invertTree(root->left); root->left = invertTree(root->right); root->right = node; return root; }
非遞歸io
struct TreeNode* invertTree(struct TreeNode *root) { struct TreeNode *node, *tmp; Stack treeStack; if (root == NULL) return root; stack_init(&treeStack, NULL); stack_push(&treeStack, root); while (treeStack.size > 0) { stack_pop(&treeStack, &node); tmp = node->left; node->left = node->right; node->right = tmp; if (node->left) stack_push(&treeStack, node->left); if (node->right) stack_push(&treeStack, node->right); } stack_destory(&treeStack); return root; }