二叉树性质 遍历方式

本文详细介绍了二叉树的性质,包括满二叉树和完全二叉树的概念,以及二叉树层数与节点数的关系。此外,还深入讲解了四种主要的二叉树遍历方法:前序遍历、中序遍历、后序遍历和层序遍历,包括递归和迭代两种实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二叉树

由一个由有限节点所组成的集合,此集合可以为空集合,或由一个树根及左右两个子树所组成。简单地说,二叉树最多只能有两个子节点,就是度小于或等于2。
形态:
在这里插入图片描述
特殊二叉树:
1.满二叉树
如果二叉树的高度为h(h>=0),树的节点为2^h-1,则称之为满二叉树(即除叶节点外的所有节点都有两个子节点)。
在这里插入图片描述
2.完全二叉树
假设二叉树的深度h
节点数小于2^h-1
节点的编号方式如同深度为h的满二叉树
从左到右,从上到下顺序一一对应
(除最后一层(叶节点)外,其它各层的节点树都达到最大个数,且最后一层从左向右的叶节点连续存在,只缺右侧若干节点)
在这里插入图片描述

一、性质

1.在二叉树的第n层上至多有2^n-1个节点
2.深度为K的二叉树至多有2^K-1个节点
3.具有n个节点的完全二叉树的深度K为:K = log(2^n)+1

二、遍历

1.前序遍历

递归:

public void preOrder(Node root) {
		if(root==null) return;
		System.out.print(root.date+" ");
		preOrder(root.left);
		preOrder(root.right);
		
	}

迭代:

	public void preOrder(Node root) {
		if(root==null) return;
		Stack<Node> stack=new Stack<BST.Node>(); //用栈来完成
		stack.push(root);
		while(!stack.isEmpty()) {
			Node temp=stack.pop();
			System.out.print(temp.date+" ");
			if(temp.right!=null) {  //先右节点如栈
				stack.push(temp.right);
			}
			if(temp.left!=null) {   //左节点入栈
				stack.push(temp.left);
			}
		}
	}

2.中序遍历

递归:

public void inOrder(Node root) {
		if(root==null) return;
		if(root.left!=null) inOrder(root.left);
		System.out.print(root.date+" ");
		if(root.right!=null) inOrder(root.right);
	}

迭代:

	public void inOrder(Node root) {
		if(root==null) return;
		Node temp=root;
		Stack<Node> stack=new Stack<BST.Node>();
		while(temp!=null||!stack.isEmpty()) {
			while(temp!=null) {  //先将最左边的节点入栈
				stack.push(temp);
				temp=temp.left;
			}
			if(!stack.isEmpty()) {
				temp=stack.pop();
				System.out.print(temp.date+" ");
				temp=temp.right;
			}
		}
		
	}

3.后序遍历

递归:

	public void postOrder(Node root) {
		if(root==null) return;
		if(root.left!=null) postOrder(root.left);
		if(root.right!=null) postOrder(root.right);
		System.out.print(root.date+" ");
	}

4.层序遍历

public void winthOrder(Node root) {
		Queue<Node> queue=new LinkedList<BST.Node>(); //队列实现
		if(root==null) return;
		queue.add(root);
		while(!queue.isEmpty()) {
			Node t=queue.poll();
			System.out.print(t.date+" ");
			if(t.left!=null) {
				queue.offer(t.left);
			}
			if(t.right!=null) {
				queue.offer(t.right);
			}
		}
		
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值