【发布时间】:2016-06-21 10:01:46
【问题描述】:
如果输入是一个数组,其中null 表示没有节点。
输入:
[1, 2, 3, null, 5, null, 7]
请假设我已经检查了输入。
对于每个array[i],其父array[i / 2]不会是null(递归,所以root不能是null)。
如何构建具有这种逻辑关系的树:
1
/ \
2 3
\ \
5 7
每个节点应该由一个TreeNode 对象表示:
class TreeNode {
public:
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
我找到了一个blog here,其中构建了一棵完整的树
但是如果上面提到的树是不完整的,如何整齐高效地做呢?
测试数据:
[输入数组]
[-64,12,18,-4,-53,null,76,null,-51,null,null,-93,3,null,-31,47,null,3,53,-81,33,4,null,-51,-44,-60,11,null,null,null,null,78,null,-35,-64,26,-81,-31,27,60,74,null,null,8,-38,47,12,-24,null,-59,-49,-11,-51,67,null,null,null,null,null,null,null,-67,null,-37,-19,10,-55,72,null,null,null,-70,17,-4,null,null,null,null,null,null,null,3,80,44,-88,-91,null,48,-90,-30,null,null,90,-34,37,null,null,73,-38,-31,-85,-31,-96,null,null,-18,67,34,72,null,-17,-77,null,56,-65,-88,-53,null,null,null,-33,86,null,81,-42,null,null,98,-40,70,-26,24,null,null,null,null,92,72,-27,null,null,null,null,null,null,-67,null,null,null,null,null,null,null,-54,-66,-36,null,-72,null,null,43,null,null,null,-92,-1,-98,null,null,null,null,null,null,null,39,-84,null,null,null,null,null,null,null,null,null,null,null,null,null,-93,null,null,null,98]
【问题讨论】:
-
是否可以选择使用特殊值(例如您的示例中的 -1)来存储空值(空节点)?
-
不完全确定你想在这里实现什么
-
我相信他正在尝试使用数组来表示一棵树,并找到了显示完整树示例的博客,所以他想知道当树不完整时如何做到这一点。跨度>
-
会有节点脱离“空”节点吗?还是您希望那些空节点成为该分支的停止点?
-
编辑我的问题更清楚。现在,输入可以被视为一个字符串。拆分后,如果可以将元素转换为 int 值,则创建节点。否则,跳过。
标签: data-structures binary-tree