树
良良2号
小时候真傻,居然盼着长大。
展开
-
树的查找路径问题
寻找树中两个节点的最近公共祖先 思路 用 两个数组 分别保存两个节点的查找路径,遍历两个数组就能找到最近公共祖先。 代码 /* * function TreeNode(x) { * this.val = x; * this.left = null; * this.right = null; * } */ /** * * @param root TreeNode类 * @param o1 int整型 * @param o2 int整型 * @return int原创 2021-09-09 15:50:44 · 519 阅读 · 0 评论 -
二叉树的层序遍历
二叉树的层序遍历 思路 常规思路,按顺序输出层序遍历的元素,不必在意该元素在哪一层上。 // 普通的层序遍历:每次只取一个元素拓展 // 先将树的根节点入队, // 如果队列不空,则进入循环 // { // 将队首元素出队,并输出它; // 如果该队首元素有左孩子,则将其左孩子入队; // 如果该队首元素有右孩子,则将其右孩子入队 // } 这里的层序遍历,需要将该元素所处的层也记录下来。 // 这里的层序遍历:每次取s_i个元素 //原创 2021-07-06 21:08:40 · 40 阅读 · 0 评论 -
二叉树的序列化
二叉树的序列化 思路 序列化:前序遍历("root.val" + "," + "root.left" + "," + "root.right") *序列化的时候一定要带逗号,因为有可能数值为复数。 反序列化稍微复杂一点 若弹出的是数字,则新建root节点,先反序列化根节点的左子树,再反序列化根结点的右子树。 若弹出的是#,则返回null空指针。 坑1:反序列化时用.split(",")函数将字符串转为数组。 坑2:即使遇到#,数组也要弹出该元素。 代码 /** * Definition for原创 2021-06-25 23:57:51 · 99 阅读 · 0 评论 -
二叉搜索树
二叉搜索树中第k小的元素 思路 中序遍历二叉搜索树,得到的是递增有序列表。 代码 /** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===und原创 2021-06-22 18:58:30 · 29 阅读 · 0 评论 -
根据中序遍历序列构造二叉树
最大二叉树 思路 最大元素为根,左右子树分别递归地构造。 代码 /** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ?原创 2021-06-17 17:50:52 · 1739 阅读 · 0 评论 -
二叉树展开为链表
二叉树展开为链表 思路 1、分别将root的左右子树拉平。 2、左子树作为新的右子树,旧的右子树连接到新右子树的末尾。 代码 /** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * th原创 2021-06-01 15:41:56 · 36 阅读 · 0 评论 -
填充完美二叉树的next指针
填充完美二叉树的next指针 思路 对于root节点,只要让root.left.next = root.right即可。 但要让节点5和节点6相连,必须从各自的父亲入手,因此递归函数需要传入两个参数,设为node1和node2,连接node1和node2需要三步 1、node1与node2相连:node1.next = node2 2、各自的左右孩子相连:node1.left.next = node1.right,node2.left.next = node2 3、node1的右孩子与node2的左孩子原创 2021-06-01 14:11:29 · 173 阅读 · 0 评论 -
翻转二叉树
翻转二叉树 代码 递归思路很简单,但容易犯错。 /** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : rig原创 2021-06-01 13:38:19 · 42 阅读 · 0 评论