构建完全二叉树、控制台打印二叉树
两段比较实用的代码,一个用于根据输入的数组构建一棵完全二叉树,一个用于在控制台打印二叉树,方便查看树的结构(打印二叉树的代码是在网上找的,现在找不到出处了,向作者抱歉)。
//首先是节点的结构 struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; ///构建完全二叉树,用到了队列 TreeNode * constructTree(int arr[], int length) { if (length <= 0) return NULL; list<TreeNode*> nodeList; TreeNode *root = new TreeNode(arr[0]); nodeList.push_back(root); for (int i = 1; i < length; i++) { TreeNode *node = new TreeNode(arr[i]); while (!nodeList.empty()) { TreeNode *top = nodeList.front(); if (!top->left) { top->left = node; nodeList.push_back(node); break; } else if (!top->right) { top->right = node; nodeList.push_back(node); break; } else nodeList.pop_front(); } } return root; }
//打印二叉树,使用了先序遍历的方法 void printTree(TreeNode *root, int blk = 0) { if (root == NULL) return; for (int i = 0; i < blk; i++) printf(" ");//缩进 printf("|—<%d>\n", root->val);//打印"|—<id>"形式 printTree(root->left, blk + 1);//打印子树,累加缩进次数 printTree(root->right, blk + 1);//打印子树,累加缩进次数 }