标签:完全 复杂度 pos 个数 ext 时间 高度 sem 节点
递归和非递归
//前序 1 2 3 4 5 6 7 依次递归的顺序 1 2 4 4 4 2 5 5 5 2 1 3 6 6 6 3 7 7 7 3 1 打印的时机问题 打印放在第一次出现 先序 打印第二次出现 中序 打印第三次 后续 public static void preOrder(TreeNode root){ if(root==null) return; System.out.print(root.val);//先序 preOrder(root.left); //System.out.print(root.val);//中序 preOrder(root.right); //System.out.print(root.val);//后续 }
非递归
前序
public static void preOrder(TreeNode root){ if(root==null) reutrn; Stack<TreeNode> stack=new Stack<>(); if(root!=null){ stack.push(root); while(!stack.isEmty()){ TreeNode ret=stack.pop(); System.out.println(ret.val+" "); if(ret.right!=null){ stack.push(ret.right); } if(ret.left!=null){ stack.push(ret.left); } } } Systm.out.println(); }
中序遍历
public static void InOrder(TreeNode root){ if(root!=null){ Stack<TreeNode >stack-new Stack<>(); while(!isEmpty()||root!=null){ if(head!=null){ stack.push(head); head=head.left; }else{ head=stack.pop() System.out.print(head.val); head=head.val; } } } Systm.out.println(); }
后序遍历
左右中
public static void PostOrder(TreeNode root){ if(root!=null){ Stack<ListNode> stack1=new Stack<>(); Stack<ListNode>stack2=new Stack<>(); stack1.push(root); while(!statck.isEmpty()){ root=stack1.pop(); stack2.push(root); if(root.left!=null){ stack1.push(root.left); }else if(root.right!=null){ stack1.push(root.right); } } while(!stack2.isEmpty()) { System.out.print(stack2.pop().val+" ‘); } } System.out.println(); }
前驱节点
left
right
parent
val
一个节点有右子树,后继节点就是右子树最左的节点
没有右子树 找以x为左节点的根。
public static TreeNode nextNode(TreeNode node){ if(node==null) return node; if(node.right!=null){ //右子树上最左的节点 node=node.right; while(node.left!=null){ node=node.left; } return node; }else{ ListNode parent=node.parent; while(parent!=null&&parent.left!=node){ node= parent; parent=node.parent; } return parent; } }
前驱节点
public static TreeNode(TreeNode node){ if(node==null) return null; if(node.left!=null){//左子树的最右节点 node=node.left; while(node.right!=null){ node=node.right; } return node; } }else{//以当前节点为右节点的根节点 ListNode parent =node.parent; while(parent!=null&&parent.right!=node){ node=parent; parent=node.parent; } return parent; }
先序序列化
1_2_4_#_#_5_#_#_3_6_#_#_7_#_#_
层序序列化
左树是否平衡
右树是否平衡
都平衡 左右数高差
设计递归返回函数
(树形dp)
二叉树中序升序就是搜索二叉树BST
有右无左
有左无右 层序遍历后面的所有节点必须都是叶子结点
时间复杂度低于O(N)
满二叉树高度为L,节点个数2^L -1;
1当前节点的右子树的左边界到了最后一层---左满
2 右子树的左边界没有到最后一层----右满
标签:完全 复杂度 pos 个数 ext 时间 高度 sem 节点
原文地址:https://www.cnblogs.com/bowenqianngzhibushiwo/p/11631497.html