加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

[经典面试题]二叉树宽度

发布时间:2020-12-13 20:15:11 所属栏目:PHP教程 来源:网络整理
导读:(1)2叉树最大宽度 /*--------------------------------------------- * 日期:2015-03-07 * 作者:SJF0115 * 题目: 2叉树的最大宽度 * 来源:经典面试题 * 博客: -----------------------------------------------*/ #include iostream #include queue us

(1)2叉树最大宽度

/*--------------------------------------------- * 日期:2015-03-07 * 作者:SJF0115 * 题目: 2叉树的最大宽度 * 来源:经典面试题 * 博客: -----------------------------------------------*/ #include <iostream> #include <queue> using namespace std; struct TreeNode{ int val; TreeNode *left; TreeNode *right; TreeNode(int x):val(x),left(NULL),right(NULL){} }; // 2叉树的最大宽度 int MaxWidthBinaryTree(TreeNode *root){ if(root == NULL){ return 0; }//if // 当前层 queue<TreeNode*> curLevel; // 下1层 queue<TreeNode*> nextLevel; // 最大宽度 int max = 0; // 当前层宽度 int width = 0; // 加入队列 curLevel.push(root); TreeNode *node; while(!curLevel.empty()){ width = 0; while(!curLevel.empty()){ ++width; if(width > max){ max = width; }//if node = curLevel.front(); curLevel.pop(); // 左子树 if(node->left != NULL){ nextLevel.push(node->left); }//if // 右子树 if(node->right != NULL){ nextLevel.push(node->right); }//if }//while swap(curLevel,nextLevel); }//while return max; } //按先序序列创建2叉树 int CreateBTree(TreeNode*& T){ int data; //按先序次序输入2叉树中结点的值,⑴表示空树 cin>>data; if(data == -1){ T = NULL; } else{ T = new TreeNode(data); //构造左子树 CreateBTree(T->left); //构造右子树 CreateBTree(T->right); } return 0; } int main() { TreeNode *root = NULL; CreateBTree(root); int result = MaxWidthBinaryTree(root); cout<<result<<endl; return 0; }

(2)2叉树各层宽度

/*--------------------------------------------- * 日期:2015-03-07 * 作者:SJF0115 * 题目: 2叉树的最大宽度 * 来源:经典面试题 * 博客: -----------------------------------------------*/ #include <iostream> #include <queue> #include <vector> using namespace std; struct TreeNode{ int val; TreeNode *left; TreeNode *right; TreeNode(int x):val(x),right(NULL){} }; // 2叉树宽度 vector<int> WidthBinaryTree(TreeNode *root){ vector<int> level; if(root == NULL){ return level; }//if // 当前层 queue<TreeNode*> curLevel; // 下1层 queue<TreeNode*> nextLevel; // 当前层宽度 int width = 0; // 加入队列 curLevel.push(root); TreeNode *node; while(!curLevel.empty()){ width = 0; while(!curLevel.empty()){ ++width; node = curLevel.front(); curLevel.pop(); // 左子树 if(node->left != NULL){ nextLevel.push(node->left); }//if // 右子树 if(node->right != NULL){ nextLevel.push(node->right); }//if }//while level.push_back(width); swap(curLevel,nextLevel); }//while return level; } //按先序序列创建2叉树 int CreateBTree(TreeNode*& T){ int data; //按先序次序输入2叉树中结点的值,⑴表示空树 cin>>data; if(data == -1){ T = NULL; } else{ T = new TreeNode(data); //构造左子树 CreateBTree(T->left); //构造右子树 CreateBTree(T->right); } return 0; } int main() { TreeNode *root = NULL; CreateBTree(root); vector<int> result = WidthBinaryTree(root); for(int i = 0;i < result.size();++i){ cout<<"第"<<i+1<<"层->"<<result[i]<<"个节点"<<endl; }//for return 0; }

这里写图片描述

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读