【LeetCode】Binary Tree Upside Down
Binary Tree Upside Down
Given a binary tree where all the right nodes are either leaf nodes
with a sibling (a left node that shares the same parent node) or empty,
flip it upside down and turn it into a tree where the original right nodes
turned into left leaf nodes. Return the new root.
For example:
Given a binary tree {1,2,3,4,5},
1
/ \
2 3
/ \
4 5
return the root of the binary tree [4,5,2,#,#,3,1].
4
/ \
5 2
/ \
3 1
由于该树的特性,右子树只能是叶节点,因此使用一个栈就能记录从根节点到最左节点。
这些栈中的节点将逆序成为新的右子树的根节点。
原先的父节点成为右子节点,原先父节点的右子节点成为左子节点。
class Solution {
public:
TreeNode *upsideDownBinaryTree(TreeNode *root)
{
if(root == NULL)
return root;
stack<TreeNode*> s; //left child list
s.push(root);
TreeNode* cur = root;
while(cur->left)
{
s.push(cur->left);
cur = cur->left;
}
TreeNode* newroot = s.top();
cur = newroot;
s.pop();
while(!s.empty())
{
TreeNode* oldfather = s.top();
s.pop();
cur->left = oldfather->right;
cur->right = oldfather;
cur = oldfather;
//reset
cur->left = NULL;
cur->right = NULL;
}
return newroot;
}
};
我设计的测试用例如下,全部通过:
int main()
{
Solution s;
TreeNode* n1 = new TreeNode();
TreeNode* n2 = new TreeNode();
TreeNode* n3 = new TreeNode();
TreeNode* n4 = new TreeNode();
TreeNode* n5 = new TreeNode(); //1. {} expect {}
TreeNode* ret = s.upsideDownBinaryTree(NULL);
if(ret == NULL)
cout << "1. pass" << endl;
else
cout << "1. fail" << endl;
//2. {1} expect {1}
n1 = new TreeNode();
ret = s.upsideDownBinaryTree(n1);
if(ret->val == && n1->left == NULL && n2->left == NULL)
cout << "2. pass" << endl;
else
cout << "2. fail" << endl;
//3. {1,2} expect {2,#,1}
n1 = new TreeNode();
n2 = new TreeNode();
n1->left = n2;
ret = s.upsideDownBinaryTree(n1);
if(ret->val == && ret->left == NULL && ret->right->val == && ret->right->left == NULL && ret->right->right == NULL)
cout << "3. pass" << endl;
else
cout << "3. fail" << endl;
//4. {1,2,3} expect {2,3,1}
n1 = new TreeNode();
n2 = new TreeNode();
n3 = new TreeNode();
n1->left = n2;
n1->right = n3;
ret = s.upsideDownBinaryTree(n1);
if(ret->val == && ret->left->val == && ret->left->left == NULL && ret->left->right == NULL && ret->right->val == && ret->right->left == NULL && ret->right->right == NULL)
cout << "4. pass" << endl;
else
cout << "4. fail" << endl;
//5. {1,2,#,3} expect {3,#,2,#,1}
n1 = new TreeNode();
n2 = new TreeNode();
n3 = new TreeNode();
n1->left = n2;
n2->left = n3;
ret = s.upsideDownBinaryTree(n1);
if(ret->val == && ret->left == NULL && ret->right->val == && ret->right->left == NULL && ret->right->right->val == && ret->right->right->left == NULL && ret->right->right->right == NULL)
cout << "5. pass" << endl;
else
cout << "5. fail" << endl;
//6. {1,2,3,4,5} expect {4,5,2,#,#,3,1}
n1 = new TreeNode();
n2 = new TreeNode();
n3 = new TreeNode();
n4 = new TreeNode();
n5 = new TreeNode();
n1->left = n2;
n2->left = n4;
n2->right = n5;
n1->right = n3;
ret = s.upsideDownBinaryTree(n1);
if(ret->val == && ret->left->val == && ret->left->left == NULL && ret->left->right == NULL && ret->right->val == && ret->right->left->val == && ret->right->left->left == NULL && ret->right->left->right == NULL && ret->right->right->val == && ret->right->right->left == NULL && ret->right->right->right == NULL)
cout << "6. pass" << endl;
else
cout << "6. fail" << endl;
//7. {1,2,#,3,4,5} expect {5,#,3,4,2,#,#,#,1}
n1 = new TreeNode();
n2 = new TreeNode();
n3 = new TreeNode();
n4 = new TreeNode();
n5 = new TreeNode();
n1->left = n2;
n2->left = n3;
n2->right = n4;
n3->left = n5;
ret = s.upsideDownBinaryTree(n1);
if(ret->val == && ret->left == NULL && ret->right->val == && ret->right->left->val == && ret->right->left->left == NULL && ret->right->left->right == NULL && ret->right->right->val == && ret->right->right->left == NULL && ret->right->right->right->val == && ret->right->right->right->left == NULL && ret->right->right->right->right == NULL)
cout << "7. pass" << endl;
else
cout << "7. fail" << endl;
}
【LeetCode】Binary Tree Upside Down的更多相关文章
- 【题解】【BT】【Leetcode】Binary Tree Preorder/Inorder/Postorder (Iterative Solution)
[Inorder Traversal] Given a binary tree, return the inorder traversal of its nodes' values. For exam ...
- 【LeetCode】Binary Tree Level Order Traversal(二叉树的层次遍历)
这道题是LeetCode里的第102道题. 题目要求: 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15 ...
- 【LeetCode】Binary Tree Postorder Traversal(二叉树的后序遍历)
这道题是LeetCode里的第145道题. 题目要求: 给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1] 进阶: 递归算法很 ...
- 【LeetCode】Binary Tree Inorder Traversal(二叉树的中序遍历)
这道题是LeetCode里的第94道题. 题目要求: 给定一个二叉树,返回它的中序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] 进阶: 递归算法很简单 ...
- 【LeetCode】Binary Tree Preorder Traversal(二叉树的前序遍历)
这道题是LeetCode里的第144道题. 题目要求: 给定一个二叉树,返回它的 前序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3] 进阶: 递归算法很 ...
- 【LeetCode】 Binary Tree Zigzag Level Order Traversal 解题报告
Binary Tree Zigzag Level Order Traversal [LeetCode] https://leetcode.com/problems/binary-tree-zigzag ...
- 【leetcode】Binary Tree Zigzag Level Order Traversal
Binary Tree Zigzag Level Order Traversal Given a binary tree, return the zigzag level order traversa ...
- 【leetcode】Binary Tree Maximum Path Sum
Binary Tree Maximum Path Sum Given a binary tree, find the maximum path sum. The path may start and ...
- 【leetcode】Binary Tree Zigzag Level Order Traversal (middle)
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
随机推荐
- 【RPC】跨语言-RPC框架
跨语言-RPC框架 跨语言 rpc_百度搜索 (5 条消息)谁能用通俗的语言解释一下什么是 RPC 框架? - 知乎 跨语言RPC框架Hessian.Thrift.Protocol Buffer之间的 ...
- [Algorithm] Check if a binary tree is binary search tree or not
What is Binary Search Tree (BST) A binary tree in which for each node, value of all the nodes in lef ...
- Mybatis特殊值Enum类型转换器-ValuedEnumTypeHandler
引言 typeHandlers 阅读官方文档 typeHandlers 一节 {:target="_blank"} MyBatis 在预处理语句(PreparedStatement ...
- Selenium2(webdriver)入门之TestNG的安装与简单使用
上一篇已经搭建好了Eclipse+selenium2的环境,这一篇主要记录下TestNG的使用. 一.在Eclipse中安装TestNG 1.打开eclipse-->help-->Inst ...
- Mongodb3安装授权
(1) mongodb 官网下载解压包mongodb-win32-x86_64-3.0.7.zip解压释放在d盘,目录为mongodb,接下来手动创建data文件夹和log文件夹分别用于存放数据和日志 ...
- MAC LINUX 安装PYQT(事例)
MAC安装 1.安装命令:brew install pyqt Warning: Your Xcode () is outdated Please install Xcode 5.0. Warning: ...
- python __setattr__和__getattr__
通过为dict添加__setattr__和__getattr__, 可以属性的语法访问dict的元素 http://www.2cto.com/kf/201507/413971.html class S ...
- @Service注解的使用
首先,在applicationContext.xml文件中加一行: <context:component-scan base-package="com.hzhi.clas"/ ...
- POJ2429_GCD & LCM Inverse【Miller Rabin素数測试】【Pollar Rho整数分解】
GCD & LCM Inverse Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9756Accepted: 1819 ...
- AOP技术分析
AOP的概述(http://www.cnblogs.com/lxp503238/p/6837653.html) 1. 什么是AOP的技术? * 在软件业,AOP为Aspec ...