大连有做途家网站吗,织梦网站模板免费下载,发卡网站源码下载,在线做六级阅读网站1 二叉树的创建
整体思路 将数组里的元素一直分为根#xff0c;左子树#xff0c;右子树#xff0c;遇到#就返回NULL#xff0c;链接到上层递归的左子树或者右子树#xff0c;一定要把一个节点的左子树全部递归完才能返回到右子树。这种方法也可以scanf一个数组里的元素左子树右子树遇到#就返回NULL链接到上层递归的左子树或者右子树一定要把一个节点的左子树全部递归完才能返回到右子树。这种方法也可以scanf一个数组里的元素然后构建出一个二叉树。 代码实现
TreeNode* TreeCreate(char* a, int* pi)
{if (a[*pi] #){(*pi);return NULL;}TreeNode* root (TreeNode*)malloc(sizeof(TreeNode));if (root NULL){perror(malloc fail);exit(-1);}root-data a[(*pi)];root-left TreeCreat(a, pi);root-right TreeCreate(a, pi);return root;
}
递归展开图 2 二叉树的销毁 销毁二叉树使用前序、中序或者后序都可以后序最方便前序中序都需要先保存左右孩子再销毁后序都遍历完了再一个一个销毁很方便。 代码实现
方法1二级指针
//销毁二叉树
void DestoryTree(TreeNode** root)
{if (*root NULL)return;DestoryTree(*((*root)-left));DestoryTree(*((*root)-right));free(*root);*root NULL;
}
方法2在main函数里面手动销毁 void DestoryTree(TreeNode* root)
{if (root NULL)return;DestoryTree(root-left);DestoryTree(root-right);free(root);
}int main()
{TreeNode* root CreateTree();DestoryTree(root);root NULL;return 0;
}
3 判断二叉树是否是完全二叉树
整体思路 只要不连续就不是完全二叉树。层序遍历全部元素都入队列空也入队列遇到空了就跳出循环 进入另外一个循环 查看从空开始后面的元素是否都是NULL若全是NULL则证明是完全二叉树若还有非空元素则证明不是完全二叉树 注意当第一个空pop的时候所有的元素都已经进队列了。可以画图理解 代码实现
// 判断二叉树是否是完全二叉树
bool TreeComplete(TreeNode* root)
{Queue q;QueueInit(q);if (root)QueuePush(q, root);int levelSize 1;while (!QueueEmpty(q)){TreeNode* front QueueFront(q);QueuePop(q);if (front NULL)break;QueuePush(q, front-left);QueuePush(q, front-right);}// 前面遇到空以后后面还有非空就不是完全二叉树while (!QueueEmpty(q)){TreeNode* front QueueFront(q);QueuePop(q);if (front){QueueDestroy(q);return false;}}QueueDestroy(q);return true;
}