题目0011 树-最小结点到根节点的路径
题目描述:
二叉树也可以用数组来存储,
给定一个数组,树的根节点的值储存在下标1
,
对于储存在下标n
的节点,他的左子节点和右子节点分别储存在下标2*n
和2*n+1
,
并且我们用-1
代表一个节点为空,
给定一个数组存储的二叉树,
试求从根节点到最小的叶子节点的路径,
路径由节点的值组成。
输入描述
输入一行为数组的内容,
数组的每个元素都是正整数,元素间用空格分割,
注意第一个元素即为根节点的值,
即数组的第n
元素对应下标n
,
下标0
在树的表示中没有使用,所以我们省略了,
输入的树最多为7层。
输出描述
输出从根节点到最小叶子节点的路径上各个节点的值,
由空格分割,
用例保证最小叶子节点只有一个。
示例一
-
输入
3 5 7 -1 -1 2 4
-
输出
3 7 2
示例二
-
输入
5 9 8 -1 -1 7 -1 -1 -1 -1 -1 6
-
输出
5 8 7 6
C++代码
//
// Created by HANWENKE on 2022/8/29.
//
/*思路:
*1·读入字符串
*2·将字符串转化为数组
*3·记录数组中子结点的最小值的下标
*4·通过下下标找其根结点加入路径*/
#include <iostream>
#include <vector>
#include <sstream>
using namespace std;
//找数组中--是叶子结点的最小值所处下标
int Min(vector<int>&nums){
//记录最小值
int Min=INT32_MAX;
//记录最小值的下标
int local=0;
//寻找最小值所在的下标--根结点从1开始
for(int i=1;i<nums.size();i++){
/*是叶子结点有两种情况:
* nums[i]!=-1,nums[i]!=0
** 第一种2*i和2*i+1的下标值为-1
* 另外一种2*i和2*i+1的下标值大于数组长度*/
int temp=nums[i];
if(temp!=-1&&temp!=0&&2*i<nums.size()&&2*i+1<nums.size(