重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
1 | function reConstructBinaryTree(pre, vin) { |
树的子结构
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
1 | function HasSubtree(pRoot1, pRoot2) { |
二叉树的镜像
操作给定的二叉树,将其变换为源二叉树的镜像。
1 | function Mirror(root) { |
从上往下打印二叉树
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
1 | function PrintFromTopToBottom(root) { |
二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同
1 | function VerifySquenceOfBST(sequence) { |
二叉树中和为某一值的路径
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
1 | function FindPath(root, expectNumber) { |
二叉树的深度
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
1 | function TreeDepth(pRoot) { |
平衡二叉树
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
1 | function TreeNode(x) { |
二叉树的下一个结点
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
1 | function GetNext(pNode) { |
对称的二叉树
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。
1 | function isSymmetrical2(root1, root2) { |
按之字形顺序打印二叉树
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
1 | function Print(pRoot) { |
把二叉树打印成多行
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
1 | function Print(pRoot) { |
序列化二叉树
请实现两个函数,分别用来序列化和反序列化二叉树
1 | function TreeNode(x) { |
二叉搜索树的第k个结点
给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
1 | function Index() { |