
二叉树
文章平均质量分 61
binling
这个作者很懒,什么都没留下…
展开
-
二叉树非递归后序遍历的4种优雅解法
方法1:状态机法状态由两个部分组成当前树的根节点root辅助Stack的状态算法就是根据当前的状态,不断跳转到下一个状态,直到root和Stack都为空。Stack里存的是当前树遍历之后再处理的节点,也就是当前树的父亲节点。class Solution { public List<Integer> postorderTraversal(TreeNode root) { List<Integer> output = new ArrayList<原创 2022-04-24 18:51:56 · 1264 阅读 · 0 评论 -
树堆TreapMap 实现
测试结果居然比红黑树,AVL都好。RBT,AVL,SBT,Treap 区别只是节点信息和 maintain函数。所有的读操作都可以放在普通BST里,insert 和 delete(除了RBT)也可以,只需要扩展Node 和 maintain函数就行。import java.util.Random;public class TreapMap, Value> { private原创 2016-09-15 19:48:51 · 666 阅读 · 0 评论 -
基于LLRB 红黑树的 TreeMap 实现
public class LLRBMap, Value> { private static final boolean RED = true; private static final boolean BLACK = false; private class Node { Key key; Value value; Node left, right; int sz, ht;原创 2016-09-14 14:51:32 · 686 阅读 · 0 评论 -
二叉树 level order 遍历问题汇总
一 如何确定层结束?1 维护一个levelEnd,如果当前结点是level end,更新levelEnd 为queue.back(),注意先判断queue是否empty,(最后一层结束后,queue就空了)。2 维护一个curLevelNum 和 一个nextLevelNum,当curLevelNum count down 到0时候,交替3 遍历完一层的时候,队列里的元素就是下一层的所原创 2014-12-26 16:29:49 · 1718 阅读 · 0 评论 -
SBT(size balanced tree) 和AVL 合二为一
SBT 和AVL类似,只是是基于size 进行balance的,旋转的case是一样的。public class AVLOrSBTTreeMap, Value> { public enum BF {HEIGHT, SIZE, NONE}; //balance factor private BF bf = BF.HEIGHT; public AVLOrSBTTreeMap() { }原创 2016-09-15 19:40:04 · 703 阅读 · 0 评论 -
基于AVL自平衡树的TreeMap实现
自平衡的插入struct node { int val; struct node* left; struct node* right; int ht; node(int v) : val(v), left(nullptr), right(nullptr) {} node() : left(nullptr), right(nullptr) {} node(i原创 2016-09-08 16:35:35 · 799 阅读 · 0 评论 -
前序序列化/反序列化二叉树
序列化:vector serializeTreePreOrder(TreeNode* root) { vector ans; function preOrder = [&](TreeNode* root) { ans.push_back(root ? to_string(root->val) : "#"); if (!root) return; preOrder(root->原创 2015-09-06 15:07:04 · 642 阅读 · 0 评论 -
关于树的算法的总结
之前总结过,主要分为liang'da'lie原创 2014-09-21 11:52:33 · 1921 阅读 · 0 评论 -
折纸游戏
一张纸对折n次,凹痕为0,凸痕为1,求对折n次对应的01串方法1 生成满二叉树法string fold(int n) { if (n <= 0) return ""; struct TreeNode { char val; TreeNode * left; TreeNode * right; TreeNode(char c) :val(c), left(nullptr)原创 2015-07-09 16:34:26 · 924 阅读 · 0 评论 -
二叉树的子树和子结构的几个问题
子树的意思是包含了一个节点,就得包含这个节点下的所有节点,一棵大小为n的二叉树有n个子树,就是分别以每个节点为根的子树。子结构的意思是包含了一个节点,可以只取左子树或者右子树,或者都不取。1.求一棵二叉树的最大BST子树struct Result { int size, min, max; TreeNode* maxBST; Result(int min, int max原创 2015-08-26 13:09:12 · 2385 阅读 · 0 评论 -
Convert Sorted List to Binary Search Tree
方案1:找中间结点作为root + recursively 建立左右子树1)快慢指针法找中间结点mid,作为root,2) recursive problem: head 到 prev 这一段链表建立左子树, mid->next 到结尾这一段链表建立右子树复杂度分析:T(n) = 2T(n/2) + n/2 应该是 (n/2) * lgnTreeNode *sortedLis原创 2014-12-29 16:52:21 · 593 阅读 · 0 评论 -
二叉树递归的新思路——递归参数上做文章,不仅仅是root,可以增加参数携带更多信息
之前总结的二叉树算法不外乎两种1)基于遍历的,2)基于原创 2014-07-11 19:00:02 · 625 阅读 · 0 评论