反转二叉树
尴尬了,昨天被问,突然不知道咋搞。
二叉树遍历,前中后,是以root为准的前中后
所以反转二叉树用后续遍历就好
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */
递归
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; }
非递归
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; }
收获不会与付出成反比
by juandx