输入数组要求
数组是按照层序输入的,当该结点为空时,用‘#’代替空的位置。
//二叉树的节点定义
class TreeNode {
int val;
TreeNode *left, *right;
public:
TreeNode(int _val) {
this->val = val;
this->left = this->right = NULL;
}
};
//从数组的某个位置的元素开始生成树,层序输入
TreeNode* createTree(vector<int> list, int start){
if (list[start] == '#') {
return NULL;
}
TreeNode* root = new TreeNode(list[start]);
int lnode = 2*start + 1;
int rnode = 2*start + 2;
if (lnode > list.size() -1) {
root->left = NULL;
}
else{
root->left = createTree(list, lnode);
}
if (rnode > list.size() -1) {
root->right = NULL;
}
else{
root->right = createTree(list, rnode);
}
return root;
}
//先序遍历函数
void PreOrderTraverse(TreeNode *T)
{
if (T){
cout << T->val << " ";
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
//层序遍历--队列
void LevelOrderTraverse(TreeNode *T)
{
queue<TreeNode *> Q;
if (T == NULL) {
return;
}
Q.push(T);//入队根指针
while (!Q.empty()){
TreeNode *cur = Q.front();
Q.pop();
cout << cur->val << " ";
if (cur->lchild)
Q.push(cur->lchild);
if (cur->rchild)
Q.push(cur->rchild);
}
cout << endl;
}