力扣链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof/ 题目描述 给定一棵二叉搜索树,请找出其中第k大的节点。 思路:中序遍历变体 按右->root->左的顺序遍历,并计数K 代码: /** ...
分类:
其他好文 时间:
2020-07-03 23:28:17
阅读次数:
69
解题思路: 这道题是要将有序数组转为二叉搜索树,所谓二叉搜索树,是一种始终满足左<根<右(另外一种更直白的解释,二叉搜索树:空树或者二叉树的所有节点比他的左子节点大,比他的右子节点小。)的特性的二叉树,如果将二叉搜索树按中序遍历的话,得到的就是一个有序数组了。那么反过来,我们可以得知,根节点应该是有 ...
分类:
编程语言 时间:
2020-07-03 10:45:13
阅读次数:
60
先中序遍历,对中序遍历得到的数组进行排序,将排序之后的数组与排序之前的数组比较,就可以找到是哪两个数进行了交换。 再中序遍历二叉树进行节点的值的交换,得到结果。 但是写得不够简洁,性能并不怎么样。 public void recoverTree(TreeNode root) { ArrayList< ...
分类:
其他好文 时间:
2020-07-01 12:55:45
阅读次数:
64
// 树根 function Tree(data,left,right) { this.data = data this.left = left this.right = right this.leftNode = Tree.leftNode this.rightNode = Tree.rightN ...
分类:
其他好文 时间:
2020-06-29 13:49:39
阅读次数:
56
根据自己对于对于遍历的理解 前序遍历:中左右 中序遍历:左中右 后序遍历:左右中 对于前序和中序,可以只改变一些printf的顺序 所以前中后名称都是针对中间(根)的结点,所以后序遍历是不可以直接移动printf的位置的,因为对于每个结点不能直接出栈,出栈输出的时候需要判断2点 1.这个节点有没有右 ...
分类:
其他好文 时间:
2020-06-28 22:34:15
阅读次数:
72
二叉排序树(BST) 二叉排序树,又称二叉查找树(BST) 左子树结点值<根节点值<右子树结点值 如果用中序遍历来遍历一棵二叉排序树的话,可以得到一个递增的有序数列 左根右 二叉排序树的查找 //二叉排序树结点 typedef struct BSTNode{ int key; struct BSTN ...
分类:
编程语言 时间:
2020-06-28 13:17:50
阅读次数:
111
线索二叉树(找前驱/后继) 建立线索的初衷就是为了在一个结点中能够更方便找到前驱结点和后继结点。 中序线索二叉树 先序线索二叉树 后序线索二叉树 中序线索二叉树找中序后继 //找到以p为跟的子树中,第一个被中序遍历的结点 ThreadNode *Firstnode(ThreadNode *p){ / ...
分类:
其他好文 时间:
2020-06-28 12:47:39
阅读次数:
107
题目链接 1038. 从二叉搜索树到更大和树 题目分析 题目要求我们把大于等于当前结点的值累加起来然后替换掉该结点原来的值。考虑到这是一棵二叉搜索树,我们从右子树开始的中序遍历就是倒序数组。 我们需要一个pre指针指向前一个结点,就可以获得比你大的结点值之和,再加上当前结点的值就可以满足题目。 代码 ...
分类:
其他好文 时间:
2020-06-26 22:10:05
阅读次数:
67
导入头文件 编写代码过程中,涉及动态内存分配等常用的函数,需要引入如下头文件 #include<stdio.h> #include<stdlib.h> 结构体定义 // 定义二分搜索树结构体 typedef struct Node { int data; struct Node * left; st ...
分类:
编程语言 时间:
2020-06-26 18:43:11
阅读次数:
77
1.要点二叉树遍历重复在查找中查找某个数时(重复+查找=二重循环),应考虑是否可以用map2.题目输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。3.示例给出前序遍历 preorder =[3,9,20,15,7]中序遍历 inorder... ...
分类:
其他好文 时间:
2020-06-26 16:49:59
阅读次数:
54