下面是树类型题目需要用到的头文件tree.h,请包含在cpp文件中编译,而不是放在c文件中编译,比如查找树中两个节点的最低公共父结点的题common_parent_in_tree.cpp,编译它的方法是:
g++ -g common_parent_in_tree.cpp -o common_parent_in_tree
下面是tree.h的内容:
#include
#include struct TreeNode{int value;std::vector vec_children;
};TreeNode* CreateTreeNode(int value){TreeNode* pNode = new TreeNode();pNode->value = value;return pNode;
}void ConnectTreeNodes(TreeNode* pParent, TreeNode* pChild){if(pParent != NULL){pParent->vec_children.push_back(pChild);}
}void PrintTreeNode(TreeNode* pNode){if(pNode != NULL){printf("value of this node is: %d
", pNode->value);printf("its children is as the following");std::vector::iterator i = pNode->vec_children.begin();while(i < pNode->vec_children.end()){if(*i != NULL)printf("%d ", (*i)->value);}printf("
");}else{printf("this node is null.
");}printf("
");
}void PrintTree(TreeNode* pRoot){PrintTreeNode(pRoot);if(pRoot != NULL){std::vector::iterator i = pRoot->vec_children.begin();while(i < pRoot->vec_children.end()){PrintTreeNode(*i);++i;}}
}void DestroyTree(TreeNode* pRoot){if(pRoot != NULL){std::vector::iterator i = pRoot->vec_children.begin();while(i < pRoot->vec_children.end()){DestroyTree(*i);++i;}delete pRoot;}
}
题目:从上到下打印二叉树 II 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / 9 20 / 15 7 返回其层次遍历结果: [ [3], [9,20], [...
题目:对称的二叉树 请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / 2 2 / / 3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:...
题目:二叉树的镜像 请完成一个函数,输入一个二叉树,该函数输出它的镜像。 例如输入: 4 / 2 7 / / 1 3 6 9 镜像输出: 4 / 7 2 / / 9 6 3 1 示例 1: 输入:root =...
题目:树的子结构 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 例如: 给定的树 A: 3 / 4 5 / 1 2 给定的树 B: 4 / 1 返回 true,因为 B...
翻页器
在src/main/resources/springmvc-servlet.xml中加入
本篇仅仅是一个记录 MergeOperator 的使用方式。 Rocksdb 使用MergeOperator 来代替Update 场景中的读改写操作,即用户的一个Update 操作需要调用rocksdb的 Get + Put 接口才能完成。 而这种情况下会引入一些额外的读写放大,对于支持SQL这种update 频繁的场景来说实在是不划...
看了很多人写的好几个去重方法,我在这里精简组合下,适用于已排序与未排序的数组。 废话不多说,上代码。