"Binary Tree Level Order Traversal" and "Balanced Binary Tree"

原创 2016年06月01日 14:26:14

这两道题刚好分别是广度优先搜索和深度优先搜索,拿出来对比学习一下。

Binary Tree Level Order Traversal:

queue<TreeNode*> _1_q;

	vector<vector<int>> ovec;
	vector<int> ivec;

	TreeNode *temp = root;
	if (!temp)
		return ovec;

	_1_q.push(temp);

	while (!_1_q.empty())
	{
		queue<TreeNode*> _2_q;//_2_q的作用域是单次循环,每个循环结束后该变量消失,相当于变相清空了队列2
		while (!_1_q.empty())
		{
			temp = _1_q.front();
			ivec.push_back(temp->val);
			_1_q.pop();
			if (temp->left)
				_2_q.push(temp->left);
			if (temp->right)
				_2_q.push(temp->right);
		}
		ovec.push_back(ivec);//将内层循环求得的树的一层的节点记录到ovec中(按顺序)
		ivec.clear();//清理内层循环记录变量ivec
		_1_q = _2_q;//双队列的好处就是可以很方便地更新_1_q,为下一次循环做准备
	}

	return ovec;


Balanced Binary Tree:

上三份代码来解释DFS,有的是从网上找的。

/*通过递归遍历整棵树来得到树的深度。
遍历的过程是首先一直向左走,走到左子树的左子树的左....的左子树,
到达叶子节点后返回父节点,然后向父节点的右子树走,这样不断回溯来实现遍历。
这就是深度优先遍历。*/
int maxDepth(TreeNode* root) {
	int deep = 0;
	if (root) {
		int lchilddeep = maxDepth(root->left);
		int rchilddeep = maxDepth(root->right);
		deep = lchilddeep >= rchilddeep ? lchilddeep + 1 : rchilddeep + 1;
	}
	return deep;
}


/*对比上一份代码,这份代码在回溯到某个父节点的时候又向下用递归做了一次深度优先遍历(getDepth)
来得到该节点的左右子树的深度,变相地增加了时间复杂度*/
public bool isBalanced(TreeNode root) {
	if (root == null) {
		return true;
	}

	int depthOfLeft = getDepth(root.left, 1);
	int depthOfRight = getDepth(root.right, 1);

	if (abs(depthOfRight - depthOfLeft) > 1) {
		return false;
	}
	else {
		return isBalanced(root.left) && isBalanced(root.right);
	}
}

private int getDepth(TreeNode tree, int currentDepth) {
	if (tree == null) {
		return currentDepth;
	}
	return max(getDepth(tree.left, currentDepth + 1),
		getDepth(tree.right, currentDepth + 1));
}

/*这份代码只需进行一次深度优先遍历,计算每个节点左右子树的高度的差值,
差值大于1返回false,否则用一个map存储该节点左右子树的最高的那一棵子
树的高度并返回true。*/
map<TreeNode*, int> heights;
bool isBalanced(TreeNode *root)
{
	if (root == NULL)
	{
		heights.insert(pair<TreeNode*, int>(NULL, 0));
		return true;
	}

	if (isBalanced(root->left) && isBalanced(root->right))
	{
		auto _l_it = heights.find(root->left);
		auto _r_it = heights.find(root->right);

		if (abs(_l_it->second - _r_it->second) > 1)
		{
			return false;

		}
		else
		{
			int currentHeight = max(_l_it->second + 1, _r_it->second + 1);
			heights.insert(pair<TreeNode*, int>(root, currentHeight));
			return true;
		}

	}
	else
	{
		return false;
	}
}




【LeetCode】102. Binary Tree Level Order Traversal 解题报告

转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51477967Subject 出处:https://leetcode.com/pro...
  • crazy1235
  • crazy1235
  • 2016年05月26日 15:06
  • 2770

102. Binary Tree Level Order Traversal [easy] (Python)

题目链接https://leetcode.com/problems/binary-tree-level-order-traversal/题目原文 Given a binary tree, retu...
  • coder_orz
  • coder_orz
  • 2016年05月10日 14:40
  • 1286

【LeetCode with Python】 Binary Tree Level Order Traversal

Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right,...
  • nerv3x3
  • nerv3x3
  • 2014年07月06日 14:12
  • 1732

Binary Tree Level Order Traversal -- LeetCode

原题链接: http://oj.leetcode.com/problems/binary-tree-level-order-traversal/  这道题要求实现树的层序遍历,其实本质就是把树看成一个...
  • linhuanmars
  • linhuanmars
  • 2014年04月11日 01:48
  • 13268

[LeetCode] Binary Tree Level Order Traversal 二叉树层次遍历(DFS | BFS)

题目:Binary Tree Level Order Traversal - 二叉树层次遍历 (DFS | BFS) Given a binary tree, return the level ord...
  • Eastmount
  • Eastmount
  • 2015年09月11日 02:20
  • 2754

LeetCode --- 107. Binary Tree Level Order Traversal II

题目链接:Binary Tree Level Order Traversal II Given a binary tree, return the bottom-up level order t...
  • makuiyu
  • makuiyu
  • 2015年04月17日 16:46
  • 1846

leetCode解题报告之Binary Tree Level Order Traversal II,I(二叉树层次遍历)

题目: Binary Tree Level Order Traversal II Given a binary tree, return the bottom-up level order tra...
  • u011133213
  • u011133213
  • 2014年03月28日 20:28
  • 14689

LeetCode102 Binary Tree Level Order Traversal Java

题目: Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to r...
  • l294265421
  • l294265421
  • 2016年04月23日 14:20
  • 2893

Leetcode[102]-Binary Tree Level Order Traversal

Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right,...
  • Dream_angel_Z
  • Dream_angel_Z
  • 2015年06月13日 10:49
  • 844

Binary Tree Zigzag Level Order Traversal -- LeetCode

原题链接: http://oj.leetcode.com/problems/binary-tree-zigzag-level-order-traversal/  这道题其实还是树的层序遍历Binar...
  • linhuanmars
  • linhuanmars
  • 2014年04月26日 04:31
  • 13066
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:"Binary Tree Level Order Traversal" and "Balanced Binary Tree"
举报原因:
原因补充:

(最多只允许输入30个字)