本文共 1801 字,大约阅读时间需要 6 分钟。
1.Invert Binary Tree 二叉树的镜像
2.Minimum Depth of Binary Tree
3.Maximum Depth of Binary Tree
struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right;};struct TreeNode* invertTree(struct TreeNode* root) { struct TreeNode* temp; if (root == NULL || (root->left == NULL && root->right == NULL)) { return root; }// else if (root->left != NULL && root->right == NULL)// { root->right = (struct TreeNode*)malloc(sizeof(struct TreeNode));// root->right = root->left;// root->right->left = root->right->right = root->left = NULL;// }// else if (root->right != NULL && root->left == NULL)// {// root->left = (struct TreeNode*)malloc(sizeof(struct TreeNode));// root->left->val = root->right->val;// root->left->left = root->left->right = root->right = NULL;// } else { temp = root->left; root->left = root->right; root->right = temp; } root->left = invertTree(root->left); root->right = invertTree(root->right); }int minDepth(struct TreeNode* root) { if (root == NULL ) { return 0; } else if ((root->left == NULL && root->right == NULL)) { return 1; } else if (root->left == NULL) { return minDepth(root->right) + 1; } else if (root->right == NULL) { return minDepth(root->left) + 1; } else { return (minDepth(root->left)> minDepth(root->right) ? minDepth(root->right) : minDepth(root->left)) + 1; }}int maxDepth(struct TreeNode* root) { int left, right; if (root == NULL) { return 0; } left = maxDepth(root->left); right = maxDepth(root->right); if (left == 0 && right == 0) { return 1; } return (left > right ? left : right) + 1;}这三道题都是比较简单的递归实现,但是编写时也出现了错误:
①树的镜像,左右树的交换,我最初想成了左右数值的交换,题目看懂了,但是想错了;
②第二三题可以用深度优先搜索算法(DFS),了解了一下 分层遍历,需要借助队列来实现,而递归都是默认的使用栈,C语言不好实现非递归方法;
③先做了第二题才做第三题,开始只是简单的改了min为max等,提交时发现超时;递归会占用栈,数据太多时会越界、效率也比较低,可以避免尽量避免,可能的用变量 代替;
④ leetcode 根的深度为1
转载地址:http://dhovi.baihongyu.com/