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