2015暑期实习生招聘阿里一面面试题之如何判判树是否为二叉搜索树 如何利用前序中序建二叉树
来源:互联网 发布:模仿声音软件下载 编辑:程序博客网 时间:2024/06/05 08:35
判断树是否为二叉搜索树,主要利用搜索树的中序遍历是递增的这一性质
#include <iostream>#include <vector>using namespace std;//建树以及判断是不是二叉树//根据前序和中序 建树 struct treeNode{ int value; treeNode* left; treeNode*right; };//vector<int> ivec;void PrintfTreeInOrder(treeNode*head){ if(head!=NULL) { PrintfTreeInOrder(head->left); cout<<head->value<<" "; PrintfTreeInOrder(head->right); } // ivec.push_back(head->value);}treeNode* buildTreeCore(int *inOrderStart,int*inOrderEnd,int*preOrderStart,int *preOrderEnd){ int length=preOrderEnd-preOrderStart+1; treeNode* root=new treeNode; root->value=preOrderStart[0]; root->left=root->right=NULL;if(length==1){if(inOrderStart[0]==preOrderStart[0]) return root; else ; //throw std::exception"error";本来是想抛出异常的 结果throw 还不会用!} int rootValue=preOrderStart[0]; int *rootInOrder=inOrderStart;while(rootInOrder<=inOrderEnd&&*rootInOrder!=rootValue) { rootInOrder++;} //改制此处! if(*rootInOrder!=rootValue) ;// throw std::exception("error input"); int leftLength=rootInOrder-inOrderStart; root->left=buildTreeCore(inOrderStart,rootInOrder-1,preOrderStart+1,preOrderStart+leftLength);root->right=buildTreeCore(rootInOrder+1,inOrderEnd,preOrderStart+leftLength+1,preOrderEnd); return root;}treeNode* bulidTree(int *preOrder,int* inOrder,int length) {if(preOrder==NULL||inOrder==NULL||length<=0) return NULL; return buildTreeCore(inOrder,inOrder+length-1,preOrder,preOrder+length-1);}int main(){int inOrder[7]={4,8,9,12,13,15,16};int preOrder[7]={12,8,4,9,15,13,16};treeNode*root=bulidTree(preOrder,inOrder,7);PrintfTreeInOrder(root);}
实际面试题是:如何判断是否为二叉树,本文引申了如何利用前序中序建树的方法
0 0
- 2015暑期实习生招聘阿里一面面试题之如何判判树是否为二叉搜索树 如何利用前序中序建二叉树
- 如何判断二叉树是否为满二叉树?
- 如何判断一个二叉树是否为平衡二叉树。
- 如何反转二叉树以及判断两棵二叉树是否为反转二叉树
- 判断一颗树是否为二叉搜索树
- 判断一棵树是否为二叉搜索树
- 判断一颗树是否为二叉搜索树
- 是否为同一棵二叉搜索树
- 判断二叉树是否为二叉搜索树BST
- 判断二叉树是否为二叉搜索树
- 二叉树问题---判断一棵树是否为搜索二叉树
- 判断二叉树是否为二叉搜索树
- 判断二叉树是否为二叉搜索树
- 是否二叉搜索树
- 是否二叉搜索树
- 如何搜索二叉树转换为双向链表
- 用递归方法对二叉树进行层次遍历(某公司实习生招聘笔试试题)
- 如何判断一棵二叉树树是否为另一棵二叉树的子树
- Android Studio常用操作技巧(不断更新)
- Linux系统下如何查看物理内存占用率
- Path Sum
- Date类学习总结(Calendar Date 字符串 相互转换 格式化)
- android 基础知识总结
- 2015暑期实习生招聘阿里一面面试题之如何判判树是否为二叉搜索树 如何利用前序中序建二叉树
- hadoop(1)
- 在开发的时候脚本语言用的最多了,写点JavaScript的一写需要注意的地方 后续
- Pinyin4j入门教程---识别中文
- .NET MVC 图片上传
- 深度定制 UIButton 按钮
- cg profiles,什么是profiles,以及如何使用CGC编译Cg语言
- 回调函数的运用
- 关于NSAutoReleasePool的理解