做Leetcode上面的题目时,遇到二叉树的问题,想要用一个二叉树进行验证,每次构造二叉树都很麻烦,特此写一个构造函数。
1.用数组构造二叉树
void treeNodeConstructor(TreeNode *&root, int data[],int n,int& index){//此处root一定要加&,为对指针的引用 /* data为存储节点数据的数组,n为data数组的长度,index为数组的索引。index也要用引用 */ if(index>=n) { return; } int e = data[index++]; if(e == '#'){ root = nullptr; }else{ root = new TreeNode(e) ; treeNodeConstructor(root->left, data,n,index); //递归构建左子树 treeNodeConstructor(root->right,data,n,index); //递归构建右子树 } }
主函数中调用为:
int main() { int data[11]={1,2,4,'#','#','#',3,'#',6,'#','#'};//先序遍历的序列 TreeNode t(1); TreeNode *root=&t; int index=0; treeNodeConstructor(root,data,11,index); Solution S; cout<<S.sumNumbers(root); return 0; }
void CreateBiTree(TreeNode *&root) { int i; cin>>i;//按先序遍历的序列输入 if(i=='#')//结束条件,cin不能输入#,而要输入35 { root=nullptr; return; } else { root=new TreeNode(i); CreateBiTree(root->left); CreateBiTree(root->right); //return; } }
int main() { TreeNode t(1); TreeNode *root=&t; CreateBiTree(root); }
原文地址:http://blog.csdn.net/yinqiaohua/article/details/43701889