`

0809-二叉树层次遍历

 
阅读更多

第一题:

struct node_t

{

    node_t *left, *right;

    int value;

};

要求编写函数 node_t* foo(node_t *node, unsigned int m, unsigned int k);

输出以 node 为根的二叉树第 m 层的第 k 个节点值.

(level, k 均从 0 开始计数)

注意:

此树不是完全二叉树;

所谓的第K个节点,是本层中从左到右的第K个节点

 

------------------------------------------------------------

第二题:

求二叉树的宽度和高度

 

package org.jyjiao;


class BiNode {
	int data;
	BiNode leftChild;
	BiNode rightChild;

	public BiNode getLeftChild() {
		return this.leftChild;
	}

	public BiNode getRightChild() {
		return this.rightChild;
	}

	public void setLeftChild(BiNode leftChild) {
		this.leftChild = leftChild;
	}

	public void setRightChild(BiNode rightChild) {
		this.rightChild = rightChild;
	}

	public int getData() {
		return data;
	}

	public void setData(int data) {
		this.data = data;
	}

}

public class BiTree1 {
	int num;
	BiNode root;

	public BiTree1(int num) {
		this.num = num;
	}

    /*
    * createTree()--创建一颗二叉树
    */
	public BiNode createTree() {
		BiNode[] queue = new BiNode[num];
		int front = 0, rear = 0, last = 0;
		int i = 0;
		BiNode root = new BiNode();
		root.setData(i);
		root.setLeftChild(null);
		root.setRightChild(null);
		queue[rear++] = root;

		while (i < num) {
			BiNode node = queue[front++];
			// System.out.print("parant:"+node.getData());
			int ldata = ++i;
			if (ldata < num) {
				BiNode lchild = new BiNode();
				lchild.setData(ldata);
				lchild.setLeftChild(null);
				lchild.setRightChild(null);
				queue[rear++] = lchild;
				node.setLeftChild(lchild);
				// System.out.print("lchild:"+lchild.getData());
			}

			int rdata = ++i;
			if (rdata < num) {
				BiNode rchild = new BiNode();
				rchild.setData(rdata);
				rchild.setLeftChild(null);
				rchild.setRightChild(null);
				queue[rear++] = rchild;
				node.setRightChild(rchild);
				// System.out.print("rchild:"+rchild.getData()+"\n");
			}
		}
		return root;
	}

	
	/*
	 * public void visitTree(BiNode root) -- 求二叉树的高度和宽度
	 * 输入:二叉树的根节点
	 * 打印:二叉树的高度和宽度
	 * front:已经出队的节点个数
	 * last:本层最右边的元素为二叉树的第几个元素
	 * rear:下层当前的入队元素个数
	 */
	public void visitTree(BiNode root) {
		int front = 0, rear = 0, last = 1;
		int curWith = 0;
		int maxWith = 0;
		int hight = 0;
		BiNode[] queue = new BiNode[num];
		if (root == null) {
			System.out.println("tree is null");
		} else {
			queue[0] = root;
			rear++;
			while (front != rear) {
				BiNode node = queue[front++];
				// System.out.println("out:"+node.getData());
				curWith++;
				if (node.getLeftChild() != null) {
					queue[rear++] = node.getLeftChild();
				}
				if (node.getRightChild() != null) {
					queue[rear++] = node.getRightChild();
				}
				if (front >= last) {

					if (curWith > maxWith) {
						maxWith = curWith;
					}
					hight++;
					last = rear;
					curWith = 0;
				}

			}
			System.out.println("with=" + maxWith + ",hight=" + hight);
		}

	}

	public static void main(String[] args) {
		BiTree1 tree = new BiTree1(4);
		BiNode root = tree.createTree();
		tree.visitTree(root);
	}

}

 

 

 

分享到:
评论

相关推荐

    数据结构实验报告6-树-二叉树的遍历算法-实验内容及要求.docx

    通过实际编程实践,加深对二叉树这一数据结构的理解,并熟练运用不同的遍历方法(先序、中序、后序和层次遍历)来处理二叉树问题。 ### 数据结构设计 为了实现上述目标,需要设计一种适合存储二叉树的数据结构。...

    数据结构课程设计报告-二叉树的遍历.docx

    本报告基于二叉树的遍历方法,旨在通过递归和非递归两种方法创建一棵二叉树,并对其进行先序遍历、中序遍历、后序遍历及层次遍历,并求出该二叉树的深度和叶子结点数。同时,报告还实现了查找功能,能够输入一个结点...

    C语言编程实现10个数据结构课程设计实例-二叉树建立遍历冒泡排序快速排序等.zip

    二叉树层次遍历.c 二叉树非递归遍历.c 二叉树建立.c 快速排序.c 括号匹配.c 冒泡排序.c 直接插入排序.c 直接选择排序.c 10个数据结构课程设计例子 查找.c 二叉排序树.c 二叉树层次遍历.c 二叉树非递归遍历.c 二叉树...

    二叉树层次遍历.rar

    数据结构课程设计实例二叉树层次遍历 数据结构课程设计实例二叉树层次遍历 数据结构课程设计实例二叉树层次遍历 数据结构课程设计实例二叉树层次遍历 数据结构课程设计实例二叉树层次遍历 数据结构课程设计实例...

    【C/C++项目开发资源】二叉树层次遍历-二叉树层次遍历

    二叉树的层次遍历(也称为广度优先遍历)是一种遍历二叉树的方法,它按照从根节点开始从上到下、从...以下是一个使用队列实现的二叉树层次遍历的示例代码(假设二叉树节点定义为TreeNode,具有val、left和right属性):

    LeetCode-按层次遍历二叉树

    LeetCode 按层次遍历二叉树 按层次遍历二叉树 按层次遍历二叉树 按层次遍历二叉树 按层次遍历二叉树

    数据结构课程设计--二叉树的遍历.docx

    数据结构课程设计--二叉树的遍历 在计算机科学中,数据结构是指计算机中组织和存储数据的方式。二叉树是一种非常重要的非线性结构,所描述的数据有明显的层次关系,其中的每个元素只有一个前驱。在计算机科学中,...

    数据结构--清华严蔚敏版 --二叉树的遍历--案例实现

    “二叉树的遍历”是指按照特定顺序访问二叉树的所有节点。这里有三种主要的遍历方法,即前序遍历、中序遍历和后序遍历,它们分别以不同的方式来确定节点的访问顺序。 1. 前序遍历(根-左-右):首先访问根节点,...

    数据结构实验-3二叉树遍历与路径查找(二叉树实验)

    实现功能:建立二叉树存储结构、求二叉树的先序遍历、求二叉树的中序遍历、求二叉树的后序遍历、求二叉树的层次遍历、求根到给定结点的路径。 主控菜单: 1.建立二叉树存储结构 2.求二叉树的先序遍历 3.求二叉树...

    10-二叉树的遍历.zip

    此外,还可以通过层次遍历(广度优先搜索)来访问二叉树,但这通常不被视为“基本”的遍历方法,因为它的顺序不是基于节点的相对位置,而是基于节点的层级。 在学习和应用这些遍历时,通常会结合实际例子,例如构建...

    数据结构-二叉树的遍历

    二叉树的遍历是研究二叉树时的重点内容,因为它涉及到访问树中的每一个节点,而遍历的方法有三种:前序遍历、中序遍历和后序遍历。这三种遍历方式各有其特点和应用场景,对于理解和操作二叉树至关重要。 1. **前序...

    数据结构实验3 二叉树层次遍历 二叉树的层次遍历

    (3)掌握二叉树层次遍历算法程序。 实验内容及要求: (1)建立包含10个结点的二叉树(树结构和数据元素的值由自己设定); (2)完成二叉树从左至右,从上至下层次遍历程序; (3)给出程序和遍历程序的结果。 ...

    数据结构--二叉树遍历

    数据结构二叉树的遍历,用到队列,是二叉树必须掌握的一种操作。

    数据结构-二叉树遍历

    它的遍历是理解和操作二叉树的基础,这其中包括前序遍历、中序遍历、后序遍历以及层次遍历(也称为广度优先搜索)。 1. 前序遍历:前序遍历的顺序是“根-左-右”,即首先访问根节点,然后递归地访问左子树,最后...

    数据结构-二叉树的遍历课程设计.doc

    在数据结构领域,二叉树是一种基础...在实际应用中,如编译器解析源代码、构建文件系统层次结构或构建搜索算法,二叉树遍历都是非常关键的技术。通过课程设计,学生可以深入理解这些概念,并将理论知识转化为实际技能。

    二叉树遍历--前序遍历

    在作业中,你被要求实现层次遍历和另一种遍历方式,层次遍历通常使用队列来实现,其步骤如下: 1. 将根节点放入队列。 2. 当队列不为空时,取出队首节点,访问该节点,然后将其左右子节点(如果存在)按顺序入队。 ...

    python-按层次遍历二叉树.docx

    层次遍历(也称为广度优先遍历或 BFS,Breadth-First Search)是一种遍历二叉树的方法,其中树的节点按照从根节点到叶子节点的层次顺序进行访问。每一层的节点从左到右依次访问。 下面是一个示例,说明如何用 ...

Global site tag (gtag.js) - Google Analytics