二叉树的前序遍历,中序遍历和后序遍历(c#)

本文介绍了一个简单的节点类和二叉树类的实现,提供了前序、中序和后序遍历方法。代码简洁明了,易于理解。

该程序很简单的实现了一个node类和一个Bintree类,没有多余的功能。

如果还要加功能,直接加即可。

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BinaryTree
{
    class Program
    {
        static void Main(string[] args)
        {
            Node<string> root = new Node<string>("0");
            Node<string> node1 = new Node<string>("1");
            Node<string> node2 = new Node<string>("2");
            Node<string> node3 = new Node<string>("3");
            Node<string> node4 = new Node<string>("4");
            Node<string> node5 = new Node<string>("5");
            Node<string> node6 = new Node<string>("6");
            Node<string> node7 = new Node<string>("7");
            root.Lchild = node1;
            root.Rchild = node2;
            node1.Lchild = node3;
            node1.Rchild = node4;
            node2.Lchild = node5;
            node2.Rchild = node6;
            node3.Lchild = node7;
            BinTree<string> tree = new BinTree<string>(root);
            tree.PreOrder();
            tree.InOrder();
            tree.PostOrder();
        }

    }
    public class Node<T>
    {
        // private filed
        private T num;
        private Node<T> lchild;
        private Node<T> rchild;

        //property
        public T Num
        {
            get
            {
                return num;
            }
            set
            {
                num = value;
            }
        }
        public Node<T> Lchild
        {
            get
            {
                return lchild;
            }
            set
            {
                lchild = value;
            }
        }
        public Node<T> Rchild
        {
            get
            {
                return rchild;
            }
            set
            {
                rchild = value;
            }
        }

        //constructor
        public Node(T val)
        {
            num = val;
            rchild = null;
            lchild = null;
        }

    }

    public class BinTree<T>
    {
        //filed
        private Node<T> head;

        //property
        public Node<T> Head
        {
            get
            {
                return head;
            }
            set
            {
                head = value;
            }
        }

        //constructor
        public BinTree()
        {
            head = null;
        }
        public BinTree(Node<T> p)
        {
            head = p;
        }

        //method
        public Node<T> GetHead(Node<T> p)
        {
            return head;
        }
        public Node<T> GetLchild(Node<T> p)
        {
            return p.Lchild;
        }
        public Node<T> GetRchild(Node<T> p)
        {
            return p.Rchild;
        }

        //前序遍历
        public void PreOrder()
        {
            Console.WriteLine("PreOrder:----------------");
            PreOrder(this.head);
        }
        public void PreOrder(Node<T> p)
        {
            if (p == null) return;
            Console.WriteLine(p.Num);
            PreOrder(p.Lchild);
            PreOrder(p.Rchild);
        }

        //中序遍历
        public void InOrder()
        {
            Console.WriteLine("InOrder:----------------");
            InOrder(this.head);
        }
        public void InOrder(Node<T> p)
        {
            if (p == null) return;
            InOrder(p.Lchild);
            Console.WriteLine(p.Num);
            InOrder(p.Rchild);
        }

        //后序遍历
        public void PostOrder()
        {
            Console.WriteLine("PostOrder:----------------");
            PostOrder(this.head);
        }
        public void PostOrder(Node<T> p)
        {
            if (p == null) return;
            PostOrder(p.Lchild);
            PostOrder(p.Rchild);
            Console.WriteLine(p.Num);
        }
    }
}

### 代码概述 本题要求实现二叉树的二叉链表存储结构,并基于扩展二叉树前序序列构建二叉树,随后输出其前序、中序、后序序遍历结果。 --- ### 代码解析 ```cpp #include <iostream> #include <queue> using namespace std; // 二叉树结点定义 struct TreeNode { char data; TreeNode* left; TreeNode* right; TreeNode(char val) : data(val), left(nullptr), right(nullptr) {} }; // 构建二叉树(根据扩展前序遍历TreeNode* buildTree() { char ch; cin >> ch; if (ch == '#') return nullptr; TreeNode* root = new TreeNode(ch); root->left = buildTree(); root->right = buildTree(); return root; } // 前序遍历 void preorder(TreeNode* root) { if (!root) return; cout << root->data; preorder(root->left); preorder(root->right); } // 中序遍历 void inorder(TreeNode* root) { if (!root) return; inorder(root->left); cout << root->data; inorder(root->right); } // 后序遍历 void postorder(TreeNode* root) { if (!root) return; postorder(root->left); postorder(root->right); cout << root->data; } // 层序遍历 void levelorder(TreeNode* root) { if (!root) return; queue<TreeNode*> q; q.push(root); while (!q.empty()) { TreeNode* node = q.front(); q.pop(); cout << node->data; if (node->left) q.push(node->left); if (node->right) q.push(node->right); } } int main() { TreeNode* root = buildTree(); cout << "前序遍历序列"; preorder(root); cout << endl; cout << "中序遍历序列"; inorder(root); cout << endl; cout << "后序遍历序列"; postorder(root); cout << endl; cout << "层序遍历序列"; levelorder(root); cout << endl; return 0; } ``` - **`buildTree`**:递归读取输入字符,若为`#`则返回空指针,否则创建新节点并递归构造左右子树。 - **三种深度优遍历**:前序(根左右)、中序(左根右)、后序(左右根),均采用递归实现。 - **`levelorder`**:使用队列实现广度优搜索(层序遍历),逐层访问节点。 - **输入输出格式匹配测试用例**,如输入 `AB#D##C##` 可正确生成对应二叉树。 --- ### 知识点 1. **二叉链表存储结构**:每个节点包含数据域两个指针域(左、右子树),适用于动态构建二叉树。 2. **递归遍历算法**:利用函数调用栈实现前、中、后序遍历,逻辑清晰且代码简洁。 3. **层序遍历与队列应用**:借助队列出特性,按层次从上到下、从左到右访问节点。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值