算法思路整理4-树

1. 1. 树

     a. 二叉树中是否存在和为指定值的路径

         i. 递归,子树是否存在指定值-root.value的子树,叶节点返回结果

         ii. 层序遍历,借助queue, 节点值改为从上到下累加值,叶节点判断是否等于sum

     b. 二叉树中和为指定值的路径有哪些

         i. 递归函数多加一个参数list存储结果,返回类型为void

            1. 1. 递归判断子树是否存在原指定值-root.value的子路径

            2. 2. 如果叶节点满足要求,加入list

         ii. 层序遍历,借助queue, 节点值改为从上到下累加值,叶节点判断是否等于sum

     c. 二叉树根节点到叶节点的所有路径的和

         i. 先bfs或dfs,递归非递归均可,求出所有的叶节点的路径

            1. 1. 可以借助队列bfs,改变val,最后一层就是叶节点的路径

            2. 2. 可以构造递归,三个参数,结果list, 当前路径,当前根节点

                 a. 当为叶节点时,将结果加入list

                 b. 当不为页节点,补充当前路径

         ii. 求路径之和

     d. 找到搜索二叉树中两个错误的节点

         i. 中根遍历,存到数组中

         ii. 遍历数组,从左到右找到第一个大于下一个的节点n1,从右往左做到的一个小于左边的节点n2,n2 n1即为所求

         iii. 时间复杂度n,空间复杂度n

     e. 二叉树中两个节点的最近公共祖先

         i. 分别求跟节点到这两个节点的路径

            1. 1. 构造递归函数,传入root, stack, key, 返回boolean

            2. 2. 如果遍历儿子节点返回true,将当前位置压栈

         ii. 对于路径,求最长前缀, 两边同时从各自栈中弹出元素至不等为止

     f. 前序遍历和中序遍历,重建二叉树

         i. 递归

         ii. 切分数组,递归左子树,递归右子树

         iii. 时间复杂度n

     g. 根据前序遍历,中序遍历恢复二叉树,并打印二叉树的最右视图

         i. 递归,切分数组,递归左子树,递归右子树

         ii. 层序遍历恢复好的二叉树,将每一层的最后一个元素存入list

     h. 判断二叉树是否为搜算二叉树和完全二叉树

         i. 判断搜索二叉树

            1. 1. 递归,当前是不是,如果是,左右子树分别是不是

            2. 2. Bfs,借助队列实现

         ii. 判断完全二叉树

            1. 1. Bfs, 如果当前节点不存子节点,那么从当前节点开始,任何节点都是叶子节点,如果满足返回true

     i. 树的直径,树中两个距离最远的叶节点之间的距离(图的查询)

         i. 点个数,边集合,边权重

         ii. 先找距离根节点最远的点,从该点出发,寻找图中距离该点的最远点

         iii. 通过邻接表构建图,HashMap>

         iv. 构建递归方法进行图中某一个点到另一个点的最长路径搜索方法

            1. 1. 参数

                 a. 图

                 b. 从哪个节点开始

                 c. 上一个节点

                 d. 之前的路径和

                 e. 当前最大的值和位置,外部定义,传入引用

            2. 2. 返回值 void

     j. 完全二叉树的节点数

         i. 方法一,递归,左+右,和是否完全二叉树没关系

            1. 1. 时间复杂度n

         ii. 方法二,二分查找,构造递归

            1. 1. 要么左边为满二叉树,要么右子树为满二叉树,每次可以砍掉一半

            2. 2. 如果左子树高度==右子树高度,说明左子树满

                 a. Return Math.power(2,LH)-1+1+递归右子树的节点数

            3. 3. 如果左子树高度>右子树高度,说明右子树满

                 a. Return Math.power(2,RH)-1+1+ 递归左子树的节点数

            4. 4. 还需要构造求树高的函数

            5. 5. 时间复杂度为2logn

     k. 二叉搜索树与双向链表

         i. 递归,返回左子树的最左节点为链表的头

         ii. 如果左子树非空,root.left= fun(左子树),root.right=fun(右子树)

         iii. 找到左子树的最右节点,最右节点.right=root

         iv. 右子树的头结点.left=root

     l. 判断二叉树是否对称

         i. 递归

            1. 1. 左子节点是否等于右子节点,如果等于,判断左子树的左子树是否等于右子树的右子树,判断右子树的左子树是否等于左子树的右子树

         ii. 层序遍历

            1. 1. 判断每层是否对称

            2. 2. 时间复杂度n,空间复杂度n

     m. 二叉树的最大深度

         i. 递归,左右深度的max+1

         ii. 层序遍历,用到queue

     n. 是否平衡二叉树

         i. 递归,返回树高,如果不平衡,返回-1

         ii. 左子树是否平衡,右子树是否平衡,返回树高

     o. 二叉搜索树的第K个节点

         i. 中根遍历二叉树,遍历的结果存储在全局List中

         ii. 当List的长度大于k,返回

         iii. 时间复杂度n,空间复杂度k

     p. 合并两个二叉树的值

         i. 递归,合并root的值,分别合并左子树,右子树

     q. T1树中是否有与T2拓扑结构完全相同的子树

         i. 方法1,层序遍历+递归

            1. 1. 层序遍历T1,T1的每个节点作为根与T2节点比对是否拓扑结构相同

            2. 2. 时间复杂度n^2

         ii. 方法2,分别进行中根遍历,保存结果到字符串st1,st2

            1. 1. 字符串可以为val_val_val这样的形式,判断st2是否是st1的字串

            2. 2. 时间复杂度n^2

     r. 有序数组转换为平衡二叉树

         i. 递归构建树,寻找root节点,数组分为两半

         ii. root.left=构建左子树,root.right=构建右子树

         iii. 时间复杂度n

     s. 二叉树的先序,中序,后续遍历

         i. 递归,传入List, 注意先中后指的是根节点的先中后

     t. 二叉树的层序遍历

         i. 构造queue,for循环,每次遍历一层,将子节点入队

     u. 二叉树之字形层序遍历

         i. 与层序遍历的区别是构造方向,每遍历一层改变方向

     v. 把二叉树打印成多行

         i. Bfs, 借助队列层序遍历

     w. 二叉树的镜像

         i. 递归,左子树等于递归右子树,右子树等于递归左子树

         ii. 时间复杂度n, 空间复杂度n

     x.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容