《剑指offer》二叉搜索树与双向链表
2016-07-19 20:07
281 查看
一、题目描述
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向二、输入描述
输入一棵二叉搜索树三、输出描述
将该二叉搜索树转换成一个排序的双向链表四、牛客网提供的框架
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: TreeNode* Convert(TreeNode* pRootOfTree) { } };
五、解题思路
按照中序遍历,按照左子树、根节点、右子树的顺序。六、代码
#include<iostream> using namespace std; struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; class Solution { public: TreeNode* newHead; TreeNode* currNode; TreeNode* Convert(TreeNode* pRootOfTree) { newHead = NULL; currNode = NULL; midOrder(pRootOfTree); return newHead; } void midOrder(TreeNode* pRootOfTree) //中序(递归)遍历 { if(!pRootOfTree) return; if(pRootOfTree->left) midOrder(pRootOfTree->left); //左子树 //加入链表 if(!newHead) //是否是第一个节点 { newHead = pRootOfTree; currNode = pRootOfTree; } else { currNode->right = pRootOfTree; pRootOfTree->left = currNode; currNode = pRootOfTree; } if(pRootOfTree->right) midOrder(pRootOfTree->right); //右子树 } };
相关文章推荐
- 《剑指offer》复杂链表的复制
- 视差滚动Parallax
- 推荐大家使用的CSS书写规范、顺序
- js中eval() 方法的使用以及一些特殊的使用方式
- redux源码分析
- javascript中数组的22种方法
- js中几种实用的跨域方法原理详解
- angular的几种元素隐藏的方式
- 关于 json解析过程中的一个问题的解决
- jQuery对象[0]倒底是什么?
- 前端工具集合
- angular的自定义属性和ng-href属性
- js学习第一天
- 一些好用的Jquery插件
- 前端性能优化(更新中...)
- 纯CSS视差滚动
- html中offsetTop、clientTop、scrollTop、offsetTop各属性介绍
- 我对JS的继承的理解
- angular中的ng-class的几种常用方式
- Jquery Ajax调用aspx页面方法 (转载)