Flatten Binary Tree to Linked List
来源:互联网 发布:淘宝店铺怎么添加客服 编辑:程序博客网 时间:2024/05/12 22:14
Given a binary tree, flatten it to a linked list in-place.
For example,
Given
1 / \ 2 5 / \ \ 3 4 6The flattened tree should look like:
1 \ 2 \ 3 \ 4 \ 5 \ 6
Hints:
题目:将一棵二叉树,装换成一个单链表。If you notice carefully in the flattened tree, each node's right child points to the next node of a pre-order traversal.
分析:hints中告诉我们,树的右指针做了链表中的next指针,并且是先序遍历的顺序。因此先序遍历这棵二叉树,分递归和迭代方法。注意,迭代的时候,要保存树的右孩子,防止右孩子丢失。
代码:
递归方法:
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: void flatten(TreeNode *root) { if(!root) return ; TreeNode *keepRight = root->right;//保存右孩子 if(previsit!=NULL){ previsit->left=NULL; previsit->right=root;//会修改右孩子 } previsit=root;//注意更新 flatten(root->left); flatten(keepRight); }private: TreeNode *previsit=NULL;//记录前一个访问的节点};迭代方法:
class Solution {public: //preorder 非递归方法 void flatten(TreeNode *root) { if(!root) return ; stack<TreeNode *> st;//辅助栈 st.push(root); TreeNode *pre=0;//保存前一个节点 while(!st.empty()){ TreeNode *p=st.top(); st.pop(); if(p->right) st.push(p->right); //先右,栈的先进后出特性 if(p->left) st.push(p->left); if(pre){ pre->right=p; pre->left=NULL; } pre=p; } pre->left=0;//尾节点置0 pre->right=0; }};
0 0
- LeetCode: Flatten Binary Tree to Linked List
- LeetCode Flatten Binary Tree to Linked List
- LeetCode: Flatten Binary Tree to Linked List
- [Leetcode] Flatten Binary Tree to Linked List
- Flatten Binary Tree to Linked List
- [LeetCode] Flatten Binary Tree to Linked List
- Leetcode: Flatten Binary Tree to Linked List
- leetcode Flatten Binary Tree to Linked List
- LeetCode Flatten Binary Tree to Linked List
- Flatten Binary Tree to Linked List
- Flatten Binary Tree to Linked List
- LeetCode - Flatten Binary Tree to Linked List
- 【leetcode】Flatten Binary Tree to Linked List
- Flatten Binary Tree to Linked List
- [LeetCode]Flatten Binary Tree to Linked List
- Flatten Binary Tree to Linked List
- Flatten Binary Tree to Linked List
- Flatten Binary Tree to Linked List
- Hibernate学习---SchemaExport自动建表
- Unity 程序员推荐书目
- 剑指offer 面试题18 树的子结构
- LINUX环境下 点亮第一个LED灯
- 数组查找
- Flatten Binary Tree to Linked List
- 程序猿网址大全
- giit fetch和git pull的区别
- 开源项目 apk cfg and android app path profiling
- 《互联网创业密码》读后感
- 仿百度团购引导页
- EndNote中期刊文献的保存格式 - xml样例
- 关于xcode重构选项的一些理解
- C++中把函数作为参数并执行