一.判断t1树是否包含t2树全部的拓扑结构 1 / \ 2 3 2 / \ / \ / \ 4 5 6 7 4 5 / \ / / 8 9 10 8 返回:true 解法(O(M×N)):如果t1中某棵子树头结点和t2头结点的值一样,则从这两个头结点开始匹配,匹配的每一步都是让t1上的节点跟着t2的先序遍历移动,每移动一步,都检查t1的当前节点和t2当前节点的值是否一样.如果匹配的过程中发现有不匹配的过程,直接返回false,那么再去寻找t1的下一棵树. public boolean conta…
一.在二叉树中找到累加和为指定值的最长路径长度 给定一棵二叉树和一个32位整数sum,求累加和为sum的最长路径长度.路径是指从某个节点往下,每次最多选择一个孩子节点或者不选所形成的节点链 -3 / \ 3 -9 / \ / \ 1 0 2 1 /\ 如果sum=6,那么累加和为6的最长路径为:-3,3,0,6,所以返回4 1 6 如果sum=-9,那么累加和为-9的最长路径为:-9,所以返回1 第一步:生成变量maxLen,记录累加和等于sum的最长路径长度 第二步:生成哈希表sumMap,负…
一.判断二叉树是否为平衡二叉树(时间复杂度O(N)) 平衡二叉树就是:要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过1. 解法:整个过程为二叉树的后序遍历.对任何一个节点node来说,先遍历node的左子树,遍历过程中收集两个信息,一个是node的左子树是否为平衡二叉树,一个是node的左子树最深到哪一层即为lH.如果发现node的左子树不是平衡二叉树,无须进行后续过程.如果node的左子树是平衡二叉树,在遍历node的右子树,同样收集两个信息.如果node的右子树也是平衡二叉树…
一.二叉树的按层打印与ZigZag打印 1.按层打印: 1 Level 1 : 1 / \ 2 3 Level 2 : 2 3 / / \ 4 5 6 Level 3 : 4 5 6 / \ 7 8 Level 4 : 7 8 题目中要求同一层的节点必须打印在一行上,并且要求输出行号.这就需要我们在原来的广度优先遍历基础上,必须要搞明白的是什么时候要换行. 解决方法:使用node类型的变量last便是正在打印的当前行的最右节点,nLast便是下一行的最右节点.假设每一层都做从左到右的宽度优先遍历…
/* 题意:建立一棵二叉树,左子树和父节点占一个宽度,右子树另外占一个宽度! 使任意左右子树交换顺序,使得整个树的宽度最小! 思路:递归交换左右子树 ! 开始写的代码复杂了,其实左右子树不用真的交换,只要返回交换与不交换最小的宽度值就好了,下次不用在查询了! */ #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define N 10005 using na…
P54A (*) Check whether a given term represents a binary tree Write a predicate istree which returns true if and only if its argument is a list representing a binary tree. Example: (istree (a (b nil nil) nil)) T (istree (a (b nil nil))) NIL (define (i…
codevs 2241 排序二叉树 ★   输入文件:bstree.in   输出文件:bstree.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 一个边长为n的正三角形可以被划分成若干个小的边长为1的正三角形,称为单位三角形. 如右图,边长为3的正三角形被分成三层共9个小的正三角形,我们把它们从顶到底,从左到右以1-9编号,见右图.同理,边长为n的正三角形可以划分成n2个单位三角形. 四个这样的边长为n的正三角形可以组成一个三棱锥.我们将正三棱锥的三个侧面依顺…
这几天详细了解了下二叉树的相关算法,原因是看了唐boy的一篇博客(你会翻转二叉树吗?),还有一篇关于百度的校园招聘面试经历,深刻体会到二叉树的重要性.于是乎,从网上收集并整理了一些关于二叉树的资料,及相关算法的实现(主要是Objective-C的,但是算法思想是相通的),以便以后复习时查阅. 什么是二叉树? 在计算机科学中,二叉树是每个节点最多有两个子树的树结构.通常子树被称作“左子树”和“右子树”,左子树和右子树同时也是二叉树.二叉树的子树有左右之分,并且次序不能任意颠倒.二叉树是递归定义的,…
题目大意就是给出你一个二叉树的前序和中序,要你求后序. 思路:二叉树的排序就是根据根节点的位置来定义的.所以找到二叉树的根节点是最重要的,二叉树的左子树和右子树也可以看成是二叉树,以此递归: #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct Node{ char ch; struct Node *left; struct Node *right; }Node; ],pre[];/…
转自:http://blog.csdn.net/wuwenxiang91322/article/details/12231657 二叉树的定义: 二叉树是树形结构的一个重要类型.许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要.    二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的.分别称作这个根的左子树和右子树的二叉树组成.…