树
司曹龙学编程
多学习 多努力 好好学编程
展开
-
1、重建二叉树
主要思路:1、先判断那些不满足的条件以及只有一个结点的情况;2、根节点 是前序遍历的第一个值;3、在中序遍历中找到根节点的位置,记为pos_root_of_in;以中序遍历中根节点的位置为参考,切丁左右子树的范围;4、然后分为左子树 右子树,将左子树入栈/容器,右子树入栈或者容器; vector<int >pre_left,pre_right,in_left,in_right...转载 2018-04-04 10:54:32 · 83 阅读 · 0 评论 -
leetcode 95 96 不同的二叉搜索树
动态规划刷题1、leetcode96 不同的二叉搜索树描述:给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?思路: 就是利用二叉树的性质 根节点选定i之后 那么它的左子树的结点个数应该是 i -1;右子树的结点的个数应该是 n-i; 它是个和的形式 因为它有i个分配方式;左右子树的根节点数目不一样 对应不同的情况; 那么 它就应该累加起来;...原创 2018-07-26 10:31:04 · 475 阅读 · 0 评论 -
(三)剑指offer37 二叉树的深度
思路:典型的递归回溯题代码:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: int Tree...原创 2018-08-31 15:51:09 · 91 阅读 · 0 评论 -
(三)剑指offer38 平衡二叉树的判断
思路:根据定义判断 dis=(left-right)《=1是否成立;方法1:求出每个节点的高度;然后再判断,递归判断左右子树是否是平衡二叉树(重复遍历了节点)方法2:把求根节点的高度的时候 记录下求得的每一个结点的高度;然后判断左右子树是不是平衡的二叉树;再判断root是不是代码:class Solution {public: //method1 /*int ...原创 2018-08-31 15:55:21 · 89 阅读 · 0 评论 -
(三)剑指offer56 二叉树的下一个结点
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:中序遍历 下一个结点有两种情况当前结点有右子树的话,就找出右子树中的最左的结点; 如果没有右子树的话 就往它的父节点找,找到第一个结点是它的父节点的左子节点的结点;代码:/*struct TreeLinkNode { ...原创 2018-09-02 00:18:17 · 106 阅读 · 0 评论 -
(三)剑指offer 57 二叉树的之子打印(栈) 58 按行打印(队列)
1、之字形打印(两个栈);/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution ...原创 2018-09-02 01:22:23 · 152 阅读 · 0 评论