某完全二叉树按层次输出,从左到右,设二叉树如下图
BM41输出二叉树的右视图
描述请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图
数据范围:
要求:空间复杂度,时间复杂度
如输入[1,2,4,5,3],[4,2,5,1,3]时,通过前序遍历的结果[1,2,4,5,3]和中序遍历的结果[4,2,5,1,3]可重建出以下二叉树:
所以对应的输出为[1,3,5]。
示例一输入:
[1,2,4,5,3],[4,2,5,1,3]复制返回值:
[1,3,5]复制
备注:二叉树每个节点的值在区间[1,10000]内,且保证每个节点的值互不相同。题解重建二叉树层次遍历先通过输入重建二叉树,然后使用层次遍历,在遍历每一层的时候,最后一个节点就是右视图的节点。
代码如下:
//https://www。现在编码器。com/practice/c 9480213597 e 45 f 4807880 c 763 DDD 5 f 0?tpId=295个标签=标题=难度=0判断状态=0 rp=0来源URL=/考试/oj
#包含位/标准数据h。
定义树结构
{
int值
结构树节点*左侧
结构TreeNode *右
TreeNode(int x) : val(x),left(nullptr),right(nullptr) {}
};
int find_val(std:vector int nums,int left,int right,int val)
{
而(左!=右)
{
if (nums[left]==val)
{
向左返回;
}
左;
}
向右返回;
}
TreeNode * build _ tree(STD:vector int pre,int pre_begin,int pre_end,std:vector int in,int in_begin,int in_end)
{
如果(预开始==预结束输入开始==输入结束)
{
返回指针
}
auto node=new TreeNode(pre[pre _ begin]);
int index=find_val(in,in_begin,in_end,node-val);
int left _ count=index-in _ begin;
int right _ count=in _ end-index-1;
node- left=build_tree(pre,pre_begin 1,pre_begin 1 left_count,in,in_begin,index);
node- right=build_tree(pre,pre_begin 1 left_count,pre_end,in,index 1,in _ end);
返回节点;
}
TreeNode * reConstructBinaryTree(STD:vector int pre,std:vector int vin)
{
返回build_tree(pre,0,pre.size(),vin,0,vin。size());
}
std:vector int求解(STD:vector int徐贤,STD:vector int钟旭)
{
STD:vector int v;
auto root=reConstructBinaryTree(徐贤,钟旭);
if (root==nullptr)
{
回归五;
}
STD:queue TreeNode * q;
问推(根);
而(!q.empty())
{
int n=q . size();
而(n - 0)
{
自动节点=q . front();
q . pop();
if (node- left!=nullptr)
{
问推(节点向左);
}
如果(节点——对!=nullptr)
{
问推(节点右移);
}
如果(n==0)
{
五。push _ back(node-val);
}
}
}
回归五;
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。