publicstaticvoidprintInOrder(TreeNode head, int height, String to, int len){ if (head == null) { return; } printInOrder(head.right, height + 1, "v", len); String val = to + head.val + to; int lenM = val.length(); int lenL = (len - lenM) / 2; int lenR = len - lenM - lenL; val = getSpace(lenL) + val + getSpace(lenR); System.out.println(getSpace(height * len) + val); printInOrder(head.left, height + 1, "^", len); }
publicstatic String getSpace(int num){ String space = " "; StringBuffer buf = new StringBuffer(""); for (int i = 0; i < num; i++) { buf.append(space); } return buf.toString(); }
publicstaticvoidmain(String[] args){ TreeNode head = new TreeNode(1); head.left = new TreeNode(-222222222); head.right = new TreeNode(3); head.left.left = new TreeNode(Integer.MIN_VALUE); head.right.left = new TreeNode(55555555); head.right.right = new TreeNode(66); head.left.left.right = new TreeNode(777); printTree(head);
printTree(head);
}
}
3. 在二叉树中找到一个节点的后继节点
【题目】 现在有一种新的二叉树节点类型如下:
1 2 3 4 5 6 7 8 9
publicclassNode{ publicint value; public Node left; public Node right; public Node parent; publicNode(int data){ this.value = data; } }
publicstaticbooleanisBST(Node head){ if (head == null) { returnfalse; } int minNum = Integer.MIN_VALUE; int cur; Stack<Node> stack = new Stack<>(); while (!stack.isEmpty() || head != null) { if (head != null) { stack.push(head); head = head.left; } head = stack.pop(); // 判断逻辑:不符合升序返回 false cur = head.value; if (cur < minNum) returnfalse; minNum = cur; head = head.right; } returntrue; }
publicstaticbooleanisCBT(Node head){ if (head == null) { returnfalse; } Queue<Node> queue = new LinkedList<>(); queue.add(head); boolean leaf = false; Node l; Node r; * 1. 有右无左:false * 2. 有左无右 无左无右:按层次遍历,后边全部为叶节点时为 true * 3. 有左有右 */ while (!queue.isEmpty()) { head = queue.poll(); l = head.left; r = head.right; if ((leaf == true && (l != null || r != null)) || l == null && r != null) returnfalse; if (l != null) { queue.offer(l); } if (r != null) { queue.offer(r); } else { leaf = true; } } returntrue; }
近期评论