[leetcode] BST与链表的相互转换
来源:互联网 发布:图文网站源码 编辑:程序博客网 时间:2024/04/27 16:42
1. 链表-->BST (借鉴smile的)
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; *//** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode *sortedListToBST(ListNode *head) { // Start typing your C/C++ solution below // DO NOT write int main() function int cnt = 0; ListNode* cur = head; while (cur) { cur = cur->next; cnt++; } return build(head, 0, cnt - 1); } TreeNode* build(ListNode* &head, int left, int right) { if (left > right) return NULL; int mid = left + (right - left) / 2; TreeNode* leftChild = build(head, left, mid - 1); TreeNode* parent = new TreeNode(head->val); parent->left = leftChild; head = head->next; parent->right = build(head, mid + 1, right); return parent; }};
这样做的好处是:不需要不断地traverse,以寻找中间点!!!!!
2. BST-->链表
二叉树转换为双向链表的思想: 保存两个关键的指针:pre指针(上一次访问的指针)和T指针;对于每一个节点,执行T->lchild = prepre;pre->rchild = T; 然后执行pre = T;当中序遍历结束时,二叉搜索树也被转化为双链表了。
void BiTreeToLinklist(BiTree &T) // change tree to linklist { if(T != NULL) // 双向链表化 { BiTreeToLinklist(T->lchild); T->lchild = pre; pre->rchild = T; pre = T; BiTreeToLinklist(T->rchild); } }
- [leetcode] BST与链表的相互转换
- [Leetcode]Integer与Roman的相互转换
- 将二叉排序树BST转换成排序的双向链表
- 将BST转换为有序的双向链表!
- 把BST转换为双向链表
- SAP中XML文件与内表的相互转换
- leetcode有序数组转换成BST
- int 与 byte[] 的相互转换
- IStream与TStream之间的相互转换
- 汇编指令与机器码的相互转换
- 汇编指令与机器码的相互转换
- enum与string,int的相互转换
- BYTES与十六进制表示的相互转换
- XML与DataSet的相互转换类
- XML与DataSet的相互转换类
- 全角与半角之间的相互转换
- JAVA的整型与字符串相互转换
- 十六进制与字符串的相互转换
- UIPanGestureRecognizer类——为view添加手势
- JavaBean 详解
- 年底招聘“六招”
- 纯JSP用户登录系统
- jdk内置工具(二)
- [leetcode] BST与链表的相互转换
- 单独编译某个工程
- ios文件读写
- Spark的standalone源码分析(一)
- Linux内核代码华人贡献统计
- 教务系统数据库设计 (一)
- 来北京的日子---二三事
- iOS注册系统通知
- 语句块操作