標籤:
兩段比較實用的代碼,一個用於根據輸入的數組構建一棵完全二叉樹,一個用於在控制台列印二叉樹,方便查看樹的結構(列印二叉樹的代碼是在網上找的,現在找不到出處了,向作者抱歉)。
//首先是節點的結構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);//列印子樹,累加縮排次數 }
構建完全二叉樹、控制台列印二叉樹