public int maxDepthNonRecursion(TreeNode root) {
		if (root == null) {
			return 0;
		}
		Deque<DepthNode> deque = new ArrayDeque<>();
		deque.push(new DepthNode(root, 1));
		DepthNode depthNode;
		int max = 0;
		while (null != (depthNode = deque.poll())) {
			TreeNode leftNode = depthNode.node.left;
			TreeNode rigthNode = depthNode.node.right;
			if (leftNode == null && rigthNode == null) {
				max = depthNode.depth > max ? depthNode.depth : max;
			} else {
				if (null != leftNode) {
					deque.push(new DepthNode(leftNode, depthNode.depth+1));
				}
				if (null != rigthNode) {
					deque.push(new DepthNode(rigthNode, depthNode.depth+1));
				}
			}

		}
		return max;
	}