二叉树高度、宽度计算

二叉树高度可以采用递归计算

public class TreeNode{
	Data value;
	TreeNode left;
	TreeNode right;
	
	TreeNode(Data data,TreeNode left,TreeNode right) {
		this.data = data;
		this.left = left;
		this.right = right;
	}
}

public int getDeep(TreeNode root) {
	if (root == null) {
		return 0;
	} else {
		int left = getDeep(root.left);
		int right = getDeep(root.right);
		return Math.max(left,right) + 1;
	}
}

二叉树宽度可以采用计算迭代和递归,优先看看迭代计算:

// 从根节点,一层一层的计算宽度,保留最大宽度
public int getWeight(TreeNode root) {
	if (root == null) {
		return 0;
	}
	Queue<TreeNode> queue = new ArrayDeque<>();
	int maxWeight = 1;
	queue.add(root);
	// 一层一层迭代
	while(true) {
		int len = queue.size();
		if(len == 0) {
			break;
		}
		// 每一层遍历所有节点
		while( len >0 ){
			// 获取并删除队列中的头部节点
			TreeNode t = queue.poll();
			len--;
			// 添加下一层的子节点到队列
			if(t.left != null){
				queue.add(t.left);
			}
			if(t.right != null){
				queue.add(t.right);
			}
			maxWeight = Math.max(maxWeight,queue.size());
		}
	}
	return maxWeight;
}

再来看看递归算法:

public int getWeight(TreeNode root) {
	if(root == null){
		return 0;
	}
	int maxWeight = 0;
	if(root.left == null && root.right == null) {
		return 1;
	} else {
		// 递归到叶子节点层,计算其宽度,然后迭代到根节点
		maxWeight = Math.max(getWeight(root.left)+getWeight(root.right),maxWeight);
	}
	return maxWeight;
}

二叉树高度、宽度计算_第1张图片

二叉树高度、宽度计算_第2张图片

你可能感兴趣的:(JAVA)