翻转二叉树

来源:互联网 发布:nginx 会话校验 编辑:程序博客网 时间:2024/05/21 12:28

翻转一棵二叉树

样例

  1         1 / \       / \2   3  => 3   2   /       \  4         4

递归版本

先翻转左子树,后翻转右子树,然后对整个树进行翻转

void swapTree(TreeNode *&root){    TreeNode *tmp = root->left;    root->left = root->right;    root->right = tmp;}void invertBinaryTree(TreeNode *root) {    // write your code here    if(root == NULL)        return;    invertBinaryTree(root->left);    invertBinaryTree(root->right);    swapTree(root);}

非递归版本

非递归版本用栈来实现,到访问到头节点的时候,将其左子树和右子树互换即可。

void swapTree(TreeNode *&root){    TreeNode *tmp = root->left;    root->left = root->right;    root->right = tmp;}void invertBinaryTree(TreeNode *root) {    // write your code here    if(root == NULL)        return;    stack<TreeNode*> stk;    stk.push(root);    while(!stk.empty())    {        TreeNode *tmp = stk.top();        stk.pop();        swapTree(tmp);        if(tmp->left)            stk.push(tmp->left);        if(tmp->right)            stk.push(tmp->right);    }}

(175) Invert Binary Tree 
http://www.lintcode.com/zh-cn/problem/invert-binary-tree/)