二叉树
yang20141109
这个作者很懒,什么都没留下…
展开
-
二叉树中权值最大的叶节点到权值最小的叶节点的距离
有一棵二叉树,树上每个点标有权值,权值各不相同,请设计一个算法算出权值最大的叶节点到权值最小的叶节点的距离。二叉树每条边的距离为1,一个节点经过多少条边到达另一个节点为这两个节点之间的距离。给定二叉树的根节点root,请返回所求距离。 解析:首先求出二叉树中所有从根节点到叶子节点的路径,存储在vector> allPath中。然后找到权值最大的叶子节点和权值最小的叶子节点所在的路径所在的原创 2016-04-02 21:11:18 · 3552 阅读 · 0 评论 -
二叉搜索树的后序遍历序列(递归与非递归)
题目:输入一个整数数组,判断该整数是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都不相同。 解析:例如输入的数组{5,7,6,9,11,10,8}。则返回true。如果输入的数组是{7,4,6,5},则返回的是false。 方法一:递归思想,数组中的最后一个元素把数组分成两部分,左半部分数字都小于最后一个元素,右半部分原创 2016-03-25 17:38:02 · 884 阅读 · 0 评论 -
判断数组是不是二叉搜索树的前序遍历结果
//判断当前序列是不是前序遍历结果bool verifyNode(vector &arr, int start, int last){ if (start == last) return true; int i = start + 1; for (; i < last; ++i) { if (arr[i] > arr[start]) break; } if (i <原创 2016-03-25 19:45:44 · 1195 阅读 · 0 评论 -
二叉树中和为某一值的路径
题目:输入一棵二叉树和一个整数,打印出二叉树中节点值得和为输入整数的所有路径,从树的根节点开始往下一直到叶子节点所经过的节点形成一条路径。 解析:每次遍历到叶子节点时,判断当前路径是否等于给定的值。如果是,则存储这条路径到allPath中,如果不是,则遍历下一条路径。//所有路径集合vector> allPath;//某条路径集合vector path;vector > Find原创 2016-03-25 21:03:54 · 350 阅读 · 0 评论 -
有序数组转换为平衡二叉树(BST)
把有序数组转换为平衡二叉树。TreeNode* buildTree(vector &nums,int start,int last){ int mid = (start + last) / 2; TreeNode *root = new TreeNode(nums[mid]); if(start == last) { return root; } if(start <= mid原创 2016-07-04 11:20:49 · 3095 阅读 · 0 评论 -
有序链表转换为平衡二叉树(BST)
有序单链表转换为平衡二叉树。TreeNode *buildTree(ListNode *&list,int n){ if (n == 0) return NULL; TreeNode *root = new TreeNode(0); root->left = buildTree(list,n / 2); root->val = list->val; list = list->n原创 2016-07-04 11:22:31 · 2824 阅读 · 0 评论 -
判断二叉树是否为平衡二叉树(BST)
给定一个二叉树,判断此树是否为平衡二叉树。平衡二叉树,根节点的值小于右孩子节点的值,且大于左孩子节点的值。递归方法:bool isValidBST(TreeNode *root, TreeNode *&pre){ if (root == NULL) return true; if (!isValidBST(root->left, pre)) return false; if (原创 2016-07-04 16:19:20 · 894 阅读 · 1 评论 -
二叉树的深度(递归和非递归)
给定一个二叉树,求此二叉树的深度。递归方法:int TreeDepth(TreeNode* pRoot){ if (pRoot == NULL) return 0; if (pRoot->left == NULL && pRoot->right == NULL) return 1; return max(TreeDepth(pRoot->left), TreeDepth(pRo原创 2016-07-18 15:36:39 · 3301 阅读 · 0 评论