Leetcode 226: Invert Binary Tree(二叉树反转 递归、非递归实现)
2015-06-13 14:41
417 查看
nvert a binary tree.
to
Trivia:
This problem was inspired by
this original tweet by
Max Howell:
Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.
非递归算法:
1、交换根节点的左右子节点
2、交换第二层每个节点的左右子节点
....
这个与二叉树层次遍历类似,代码如下:
递归算法:
1、交换根节点的左右子树。
2、对左右子树分别执行递归反转 。
代码如下:
4 / \ 2 7 / \ / \ 1 3 6 9
to
4 / \ 7 2 / \ / \ 9 6 3 1
Trivia:
This problem was inspired by
this original tweet by
Max Howell:
Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.
非递归算法:
1、交换根节点的左右子节点
2、交换第二层每个节点的左右子节点
....
这个与二叉树层次遍历类似,代码如下:
TreeNode* invertTree2(TreeNode* root) { queue<TreeNode*> tree_queue; if (root == NULL) return root; tree_queue.push(root); while(tree_queue.size() > 0){ TreeNode * pNode = tree_queue.front(); tree_queue.pop(); TreeNode * pLeft = pNode->left; pNode->left = pNode->right; pNode->right = pLeft; if (pNode->left) tree_queue.push(pNode->left); if (pNode->right) tree_queue.push(pNode->right); } return root; }
递归算法:
1、交换根节点的左右子树。
2、对左右子树分别执行递归反转 。
代码如下:
TreeNode* invertTree(TreeNode* root) { if(root==NULL) return NULL; TreeNode * ptmpNode = root->left; root->left = invertTree(root->right); root->right = invertTree(ptmpNode); return root; }
相关文章推荐
- delegate事件代理
- [LeetCode] Generate Parentheses
- 牛人之路
- DNS的实现方法
- JAVA并发编程——守护线程(Daemon Thread)
- Python模块学习笔记— —OpenCV(01)模块的配置
- 面对死亡
- DSP中两个延时函数的区别(转)
- TCP连接的建立与释放
- IOS的forin循环和for循环
- 看了极光推送技术原理的几点思考
- FaceBook/infer-分析iOS项目
- Latex 通过生成dvi文件 生成pdf文件
- WAMPServer自拟定端口号
- 设计模式(迭代器模式)
- LeetCode 107 Binary Tree Level Order Traversal II
- Shiro的helloword
- linux下串口的阻塞和非阻塞操作
- stm32库函数学习篇---NVIC与外部中断
- 第14周 【项目2-用文件保存的学生名单】