Traverse binary tree by level

二叉树按层次遍历,很简单,队列即可。假定是满二叉树,空间复杂度是多少呢?应该是O(n),因为最后的队列包含N/2个叶节点。

如果要求O(lgn)空间怎么实现呢?卡住了。。。。

原来可以用递归的方式实现O(lgn)的按层次遍历,这时候用的是栈空间。

void printLevel(TreeNode *root, int level) {
	if (root == NULL || level < 1) {
		return;
	}

	if (level == 1) {
		cout << root->val << " ";
		return;
	}

	printLevel(root->left, level - 1);
	printLevel(root->right, level - 1);
}

int getDepth(TreeNode *root) {
	if (root == NULL) {
		return 0;
	}

	int ldepth = getDepth(root->left);
	int rdepth = getDepth(root->right);
	return (max(ldepth, rdepth) + 1);
}

int _tmain(int argc, _TCHAR* argv[])
{
	TreeNode *root = new TreeNode(1);
	root->left = new TreeNode(2);
	root->left->left = new TreeNode(3);
	root->left->right = new TreeNode(5);
	root->right = new TreeNode(4);
	root->right->right = new TreeNode(6);
	root->right->right->left = new TreeNode(7);
	root->right->right->left->right = new TreeNode(9);
	root->right->right->right = new TreeNode(8);

	int levels = getDepth(root);
	for (int i = 1; i <= levels; ++i) {
		printLevel(root, i);
		cout << endl;
	}

	return 0;
}

例子用的不是满二叉树,以前程序里面创建的一个树。基本思想到了 - 有些tricky呀,不好想到。

你可能感兴趣的:(递归,二叉树,遍历)