2
如何使用级别顺序遍历序列构造二叉树,例如从序列{1,2,3,#,#,4,#,#,5 },我们可以构造一个二叉树这样的:如何使用级别顺序遍历序列构造二叉树
1
/\
2 3
/
4
\
5
其中“#”表示下文有节点存在的路径终止。
最后我用C++实现范忠算法
struct TreeNode
{
TreeNode *left;
TreeNode *right;
int val;
TreeNode(int x): left(NULL), right(NULL), val(x) {}
};
TreeNode *build_tree(char nodes[], int n)
{
TreeNode *root = new TreeNode(nodes[0] - '0');
queue<TreeNode*> q;
bool is_left = true;
TreeNode *cur = NULL;
q.push(root);
for (int i = 1; i < n; i++) {
TreeNode *node = NULL;
if (nodes[i] != '#') {
node = new TreeNode(nodes[i] - '0');
q.push(node);
}
if (is_left) {
cur = q.front();
q.pop();
cur->left = node;
is_left = false;
} else {
cur->right = node;
is_left = true;
}
}
return root;
}
你看,在数组{1,2,3,#,#,4,#,#,5}中,元素4的左边孩子应该是#和5,但是4的索引是5,#' s指数是7,5的指数是8 – bigpotato
@bigpotato你能描述一下你的数组吗?如何知道哪个元素是谁的孩子?通常,我是数组如何表示二叉树。 –
请看我的问题的描述,有一个例子 – bigpotato